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