使单个 TreeViewNode 不可选择

问题描述

我正在尝试使我的 WinUI TreeViewNode 的根 TreeView 充当其可选子节点的不可选择“文件夹”。但是,SelectionMode 属性仅适用于整个 TreeView,而不适用于 TreeViewNode 的单独实例。

如何禁用对单个节点的选择,同时仍为展开/折叠功能启用它?

解决方法

如何禁用对单个节点的选择,同时仍为展开/折叠功能启用它?

如果我们只是简单地将节点的 IsEnabled 属性设置为 false,它可能适合您的场景,但它也会禁用展开/折叠功能。所以我们需要独立实现展开/折叠功能。我们可以将 TreeViewItem IsExpanded 属性与 bool 值绑定,并使用它来展开/折叠节点。

<DataTemplate x:Key="FolderTemplate" x:DataType="local:ExplorerItem">
    <TreeViewItem
        AutomationProperties.Name="{x:Bind Name}"
        IsEnabled="False"
        IsExpanded="{Binding ElementName=MyTreeView,Path=DataContext.IsOpen,Mode=OneWay}"
        IsSelected="{x:Bind IsSelected,Mode=TwoWay}"
        ItemsSource="{x:Bind Children}">
        <StackPanel Orientation="Horizontal">
            <Image Width="20" Source="../Assets/folder.png" />
            <TextBlock Margin="0,10,0" />
            <TextBlock Text="{x:Bind Name}" />
        </StackPanel>
    </TreeViewItem>
</DataTemplate>

代码隐藏

private bool _isOpen;
public bool IsOpen
{
    get
    {
        return _isOpen;
    }

    set
    {
        _isOpen = value;
        NotifyPropertyChanged("IsOpen");
    }

}

使用

 IsOpen = true;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...