C# TreeViewItem的IsSelected属性的触发器在xaml中不工作?

C# TreeViewItem的IsSelected属性的触发器在xaml中不工作?,c#,wpf,treeview,C#,Wpf,Treeview,我在wpf应用程序中实现了一个树视图。它可以很好地显示数据,但现在我希望在选定的树状视图项目周围显示边框。因此,我在边框控件中指定了带有textblock控件的树视图标题容器。边框显示正确,但不会根据树状视图项的IsSelected属性更改颜色。以下是我使用的xaml: <Style TargetType="TreeViewItem" x:Key="StyleTreeViewItemContainer"> <Setter Property="IsExpa

我在wpf应用程序中实现了一个树视图。它可以很好地显示数据,但现在我希望在选定的树状视图项目周围显示边框。因此,我在边框控件中指定了带有textblock控件的树视图标题容器。边框显示正确,但不会根据树状视图项的
IsSelected
属性更改颜色。以下是我使用的xaml:

<Style TargetType="TreeViewItem" x:Key="StyleTreeViewItemContainer">
            <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
            <Setter Property="Background" Value="White"></Setter>
</Style>
<TreeView Grid.Row="3" x:Name="TreeViewServer"  Panel.ZIndex="0" ItemContainerStyle="{StaticResource StyleTreeViewItemContainer}">
                    <TreeView.Resources>
                        <Style TargetType="TreeViewItem">
                            <Style.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter Property="BorderBrush" Value="Green"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}"   DataType="{x:Type ViewModels:ServerTreeViewItemModel}">
                            <TreeViewItem  AllowDrop="{Binding AllowDrop}" Margin="{StaticResource MarginTreeViewItem}"    HorizontalContentAlignment="Left"  PreviewMouseDown="TreeViewItemServer_PreviewMouseDown" HorizontalAlignment="Left" FontSize="{StaticResource MediumFontSize}" Drop="TreeViewItem_Drop" >
                                <TreeViewItem.Header>
                                    <Border BorderBrush="{Binding Background, RelativeSource={RelativeSource AncestorType=TreeViewItem}}"  BorderThickness="1">
                                        <TextBlock Text="{Binding Path=Text}"></TextBlock>
                                    </Border>
                                </TreeViewItem.Header>
                            </TreeViewItem>
                        </HierarchicalDataTemplate>
          </TreeView.Resources>
  </TreeView>

尝试将
ItemContainerStyle
建立在
StyleTreeViewItemContainer
的基础上,而不是向
添加隐式
样式:



TreeView中的隐式样式。资源可能会被忽略,因为您显式设置了ItemContainerStyle。它适用于所选的项。但是对于取消选择的项,边框不会被删除。我还为IsSelected设置为false时的触发器添加了代码。但是不会调用它。@VK您需要创建默认的setter对于
BorderBrush
在取消选择后将其禁用,如
@mm8,最初我看不到边框。当我选择一个节点时,会显示边框。但当我选择其他节点时,以前选择的节点上的边框并没有消失。@您的建议奏效了。但我必须在树视图资源中定义默认的borderbrush值,因为当我在StyleTreeViewItemContainer样式下定义它时,它不起作用。
<TreeView Grid.Row="3" x:Name="TreeViewServer"  Panel.ZIndex="0">
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem" BasedOn="{StaticResource StyleTreeViewItemContainer}">
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="BorderBrush" Value="Green"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </TreeView.ItemContainerStyle>
    <TreeView.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}"   DataType="{x:Type ViewModels:ServerTreeViewItemModel}">
            <TreeViewItem  AllowDrop="{Binding AllowDrop}" Margin="{StaticResource MarginTreeViewItem}"    HorizontalContentAlignment="Left"  PreviewMouseDown="TreeViewItemServer_PreviewMouseDown" HorizontalAlignment="Left" FontSize="{StaticResource MediumFontSize}" Drop="TreeViewItem_Drop" >
                <TreeViewItem.Header>
                    <Border BorderBrush="{Binding Background, RelativeSource={RelativeSource AncestorType=TreeViewItem}}"  BorderThickness="1">
                        <TextBlock Text="{Binding Path=Text}"></TextBlock>
                    </Border>
                </TreeViewItem.Header>
            </TreeViewItem>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>