只有在选中时才展开TreeViewItem,按下展开箭头时不会展开
我正在尝试这样设置:当用户选择一个 TreeViewItem 时,就会展开。然而,问题在于如果用户选择展开器来折叠该项,它也会被视为已被选中。
我该如何让它仅在头部被选中时才展开该项?
以下是代码:
XAML:
<TreeView ItemsSource="{Binding TreeViewItems}">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded"
Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Header}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
代码:
public bool IsExpanded
{
get => _isExpanded;
set
{
if (_isExpanded == value)
return;
_isExpanded = value;
OnPropertyChanged();
}
}
public bool IsSelected
{
get => _isSelected;
set
{
if (_isSelected == value)
return;
_isSelected = value;
if (_isSelected)
{
IsExpanded = true;
}
OnPropertyChanged();
}
}
解决方案
你应该重写 TreeViewItem 的模板并设置 Focusable="False"。不让展开器元素获得焦点应该就能解决你的问题。
另外,如果你正在使用自定义/扩展的 TreeViewItem,你可以在 OnApplyTemplate 的覆盖中搜索模板中的 ToggleButten,并在处理程序中设置 Focusable。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。