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是如何起作用的吗?