禁用WPF TreeView(或TreeViewItem)选择?

Shi*_*mmy 4 wpf treeview xaml itemscontrol selection

是否有一个很好的方法(除了重新整理TreeViewItem.Template)以禁用选择TreeView

我基本上寻找的ItemsControl风格TreeView(An ItemsControl是最好用'禁用'选择ListBox,阅读这篇文章)

小智 18

试试这个:

<Trigger Property="HasItems" Value="true">
   <Setter Property="Focusable" Value="false" />
</Trigger>
Run Code Online (Sandbox Code Playgroud)

  • 要扩展此答案,在Tree TreeViewItems上将Focusable设置为false也会阻止它们被选中. (3认同)
  • 不幸的是,当折叠一个节点时,这仍然会导致根获得选择 (2认同)

小智 6

基于当前接受的答案的链接,我在我的项目中实现了这一点:

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
    </Style>
</ListView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

也适用于 TreeViewItem。在视图模型中:

protected bool _DisableSelection;
private bool _IsSelected;
public bool IsSelected
{
    get { return _IsSelected; }
    set
    {
        if (value == _IsSelected) return;
        _IsSelected = _DisableSelection ? false : value;
        NotifyPropertyChanged();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你不必去打猎了!


Shi*_*mmy 6

这对我来说很有效(基于这个答案,但与项目无关 - 选择被禁用):

<TreeView>
  <TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
      <Setter Property="Focusable" Value="False" />
    </Style>
  </TreeView.ItemContainerStyle>
</TreeView>
Run Code Online (Sandbox Code Playgroud)


Dan*_*ose 1

每当选择一个项目时,您都可以“取消选择”它。前任。修改http://www.codeproject.com/KB/WPF/TreeView_SelectionWPF.aspx中的代码或使用 MVVM 方法(请参阅http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx)并始终设置 IsSelected回到假。

  • 虽然这在理论上可以回答这个问题,但我们希望您在答案中包含链接文章的基本部分,并提供[参考链接](http://meta.stackexchange.com/q/8259)。如果不这样做,答案就会面临链接失效的风险。 (7认同)