代码之家  ›  专栏  ›  技术社区  ›  ebattulga

如何在WPF中创建不可选择的TreeView项

  •  4
  • ebattulga  · 技术社区  · 14 年前

    我正在装订TreeView。我的原因是TreeView级别0不可选择。单击0级树视图项时,当前项必须折叠,并且必须选择第一个子项。

    ├ Item 1   //<- level 0. this item must be unselectable
    ├─ Child Item 11 //<- level 1
    ├─ Child Item 12
    ├ Item 2   //<- level 0. When i click this item, that is automatically collapse
    ├─ Child Item 21
    ├─ Child Item 22
    

    如何使用样式进行此操作?

    1 回复  |  直到 13 年前
        1
  •  7
  •   Tim Cooper    13 年前

    我会在我的视图模型中这样做。0级项目的视图模型将具有:

    public bool IsSelected
    {
        get { return false; }
        set
        {
            // error checking is omitted
            Children[0].IsSelected = value;
    
            // let WPF know that IsSelected may have changed from what it's expecting
            this.Dispatcher.BeginInvoke((ThreadStart)delegate
            {
                this.OnPropertyChanged(() => this.IsSelected);
            });
        }
    }
    

    您的XAML如下所示:

    <TreeView>
        <TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>
    

    现在,每当用户单击一级项目时,虚拟机将拒绝被选择,而是选择其第一个子项目。

    您可以使用完全相同的技术来处理折叠级别周围的需求。