/ / WPF Treeview: Wie wird der abgerundete Rahmen um das ausgewählte Element herum angezeigt? - .net, wpf, Baumansicht, wpf-Kontrollen

WPF-Baumansicht: Wie wird der abgerundete Rahmen um das ausgewählte Element herum angezeigt? - .net, wpf, Baumansicht, wpf-Kontrollen

Ich versuche, die abgerundete Grenze um dieausgewähltes Element der Baumansicht (wie das im Windows Explorer unter Vista). Das Problem ist, dass der Trigger im folgenden Code nicht zu funktionieren scheint. Es sieht so aus, als ob die IsSelected-Eigenschaft immer falsch ist.

 <TreeView x:Name="m_treeView" BorderThickness="0" d:LayoutOverrides="Width, Height">
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<Style.Resources>
<Brush x:Key="{x:Static SystemColors.HighlightBrushKey}">Transparent</Brush>
</Style.Resources>
</Style>
</TreeView.Resources>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:DirectoryPresentationBase}" ItemsSource="{Binding Children}">
<TreeViewItem>
<TreeViewItem.Header>
<Border  Name="SelectedBorder"  CornerRadius="3" Background="#EFF8FD" BorderBrush="#99DEFD"
BorderThickness="1" >
<StackPanel Orientation="Horizontal">
<interactivity:Interaction.Behaviors>
<local:TreeViewExpandBehavior AssociatedTreeView="{Binding ElementName=m_treeView}"/>
</interactivity:Interaction.Behaviors>
<Image x:Name="img" Width="24" Height="16" Stretch="None" Source="{Binding SmallIcon}"/>
<TextBlock Text="{Binding Name}" Margin="5,0" />
</StackPanel>
</Border>
</TreeViewItem.Header>
</TreeViewItem>
<HierarchicalDataTemplate.Triggers>
<Trigger Property="TreeViewItem.IsSelected" Value="True">
<Setter Property="Background" TargetName="SelectedBorder"  Value="Red"/>
<Setter Property="BorderBrush" TargetName="SelectedBorder"  Value="Green"/>
</Trigger>
<Trigger Property="TreeViewItem.IsSelected" Value="False">
<Setter Property="Background" TargetName="SelectedBorder"  Value="Transparent"/>
<Setter Property="BorderBrush" TargetName="SelectedBorder"  Value="Transparent"/>
</Trigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

Antworten:

4 für die Antwort № 1

Entfernen Sie zuerst den Auslöser IsSelected=False. Es wird automatisch alle Änderungen rückgängig machen, wenn IsSelected wird nicht True.

Zweitens, verschieben Sie Trigger nach TreeView.Resources:

            <TreeView.Resources>
<Style TargetType="TreeViewItem">
.....
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Red"/>
<Setter Property="BorderBrush" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</TreeView.Resources>

Drittens, entfernen TreeViewItem Etikett. Benutzen Border direkt innerhalb von HierarchicalDataTemplate. Das liegt daran, dass du alles hineinlegst HierarchicalDataTemplate ist in einigen bereits instanziiert TreeViewItem.

Viertens bind den Rahmen und den Rahmen des Rahmens an die Elemente von treeviewitem

Background="{Binding Background, RelativeSource={RelativeSource AncestorType=TreeViewItem}}"
BorderBrush="{Binding BorderBrush, RelativeSource={RelativeSource AncestorType=TreeViewItem}}"