使单个 TreeViewNode 不可选择
Make a single TreeViewNode non-selectable
我正在尝试让我的 WinUI TreeView
的根目录 TreeViewNode
充当其可选择的子节点的不可选择的“文件夹”。但是,SelectionMode
属性 仅适用于整个 TreeView
而不是 TreeViewNode
.
的单独实例
如何禁用对单个节点的选择,同时仍然为 expand/collapse 功能启用它?
How can I disable selection of a single node, while still keeping it enabled for the expand/collapse functionality?
如果我们只是简单地将节点的 IsEnabled
属性 设置为 false,它可能适合您的场景,但它也会禁用 expand/collapse 功能。所以我们需要独立实现 expand/collapse 功能。我们可以将 TreeViewItem
IsExpanded
属性 绑定到 bool 值,并将其用于 expand/collapse 节点。
<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,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;
我正在尝试让我的 WinUI TreeView
的根目录 TreeViewNode
充当其可选择的子节点的不可选择的“文件夹”。但是,SelectionMode
属性 仅适用于整个 TreeView
而不是 TreeViewNode
.
如何禁用对单个节点的选择,同时仍然为 expand/collapse 功能启用它?
How can I disable selection of a single node, while still keeping it enabled for the expand/collapse functionality?
如果我们只是简单地将节点的 IsEnabled
属性 设置为 false,它可能适合您的场景,但它也会禁用 expand/collapse 功能。所以我们需要独立实现 expand/collapse 功能。我们可以将 TreeViewItem
IsExpanded
属性 绑定到 bool 值,并将其用于 expand/collapse 节点。
<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,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;