C# 始终在树状视图中显示所选项目
是否有办法始终显示C# 始终在树状视图中显示所选项目,c#,wpf,xaml,C#,Wpf,Xaml,是否有办法始终显示TreeView中的选定项?换句话说,是否禁止折叠包含选定项的节点 我有一个带有分层数据模板的TreeView <TreeView ItemsSource="{Binding Properties, Mode=OneWay}"> <TreeView.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries&
TreeView
中的选定项?换句话说,是否禁止折叠包含选定项的节点
我有一个带有分层数据模板的TreeView
<TreeView ItemsSource="{Binding Properties, Mode=OneWay}">
<TreeView.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ExpanderTreeViewItemStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
<HierarchicalDataTemplate DataType="{x:Type viewModel:ComplexProperty}" ItemsSource="{Binding Properties, Mode=OneWay}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding DisplayName}"/>
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type viewModel:SimpleProperty}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding DisplayName, Mode=OneWay}"/>
<TextBlock Text="{Binding Value, Mode=OneWay}"/>
</StackPanel>
</DataTemplate>
</ResourceDictionary>
</TreeView.Resources>
</TreeView>
设置样式,以便只有没有子节点的节点才是可聚焦的(容器项被模板化为使用扩展器,而不是通常的带有+/-按钮的树,但这不会有什么区别)
选择叶节点时,如何防止包含节点被包装,从而隐藏所选节点
这是供参考的款式
<Style TargetType="TreeViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeViewItem">
<Grid Margin="8,4">
<Border Name="ItemBorder" BorderBrush="Gray" BorderThickness="0.3" Padding="6" SnapsToDevicePixels="True">
<Grid>
<Expander Name="StructuredItemExpander">
<Expander.Header>
<ContentPresenter ContentSource="Header"/>
</Expander.Header>
<ItemsPresenter/>
</Expander>
<ContentPresenter Name="AtomicItemContents" ContentSource="Header" Visibility="Collapsed"/>
</Grid>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="TreeViewItem.HasItems" Value="False">
<Setter TargetName="StructuredItemExpander" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="AtomicItemContents" Property="Visibility" Value="Visible"/>
<Setter TargetName="ItemBorder" Property="BorderBrush" Value="Transparent"/>
<Setter Property="Focusable" Value="True"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="ItemBorder" Property="BorderBrush" Value="Aqua"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Focusable" Value="False"/>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel IsItemsHost="True" Orientation="Vertical"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
您可以尝试在树状视图中管理IsSelected
属性查看项目并禁止使用DataTrigger进行折叠
顺便说一句,您可以共享项目样式吗?@PavelAnikhouski我添加了项目样式以供参考。你能详细说明一下DataTrigger是如何起作用的吗?