Changement WPF treeViewItem couleur d'arrière-plan lorsqu'il est sélectionné, mais a perdu le focus
Je suis en train de changer un TreeViewItem couleur de fond quand il a choisi, mais a perdu le focus.
J'ai vu des semblables à des questions comme:
WPF TreeViewItem arrière-plan
mais je ne pouvais pas l'utiliser...
Voici mon arborescence du code Xaml:
> <UserControl x:Class="Ednfi.Setup.Presentation.Views.TreeViewViews.StationTree"
> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
> xmlns:behaviour="clr-namespace:Ednfi.Setup.Presentation.Extensions;assembly=Ednfi.Setup.Presentation"
> xmlns:nodes="clr-namespace:Ednfi.Setup.Presentation.ViewModels.TreeViewViewModels.Nodes"
> mc:Ignorable="d"
> xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
> xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
> d:DesignHeight="226" d:DesignWidth="227"
> xmlns:ml="clr-namespace:Ednfi.Setup.Presentation.ml_resources">
> <TreeView Margin="10 0 10 20" ItemsSource="{Binding Path=Root.Children}" VirtualizingStackPanel.IsVirtualizing="True"
> VirtualizingStackPanel.VirtualizationMode="Recycling">
>
>
> <TreeView.ItemContainerStyle>
> <Style TargetType="{x:Type TreeViewItem}">
> <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}"/>
> <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
> </Style>
> </TreeView.ItemContainerStyle>
> <TreeView.Resources>
> <Style TargetType="{x:Type TreeViewItem}">
> <Setter Property="Background" Value="Transparent" />
> <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment,
> RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
> />
> <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment,
> RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
> />
> <Setter Property="Padding" Value="1,0,0,0" />
> <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
> <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
> <Setter Property="behaviour:TreeViewItemBehavior.IsBroughtIntoViewWhenSelected"
> Value="True" />
> <Setter Property="Template">
> <Setter.Value>
> <ControlTemplate TargetType="{x:Type TreeViewItem}">
> <Grid>
> <Grid.ColumnDefinitions>
> <ColumnDefinition MinWidth="19" Width="Auto" />
> <ColumnDefinition Width="Auto" />
> <ColumnDefinition Width="*" />
> </Grid.ColumnDefinitions>
> <Grid.RowDefinitions>
> <RowDefinition Height="Auto" />
> <RowDefinition />
> </Grid.RowDefinitions>
> <ToggleButton x:Name="Expander" IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource
> TemplatedParent}}" ClickMode="Press" />
> <Border Grid.Column="1" x:Name="Selection_Border" Background="{TemplateBinding Background}"
> BorderBrush="{TemplateBinding BorderBrush}"
> BorderThickness="{TemplateBinding BorderThickness}"
> Padding="{TemplateBinding Padding}">
> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
> x:Name="PART_Header" ContentSource="Header" />
> </Border>
> <ItemsPresenter Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" x:Name="ItemsHost" />
> </Grid>
> <ControlTemplate.Triggers>
> <Trigger Property="IsExpanded" Value="false">
> <Setter Property="Visibility" Value="Collapsed" TargetName="ItemsHost" />
> </Trigger>
> <Trigger Property="HasItems" Value="false">
> <Setter Property="Visibility" Value="Hidden" TargetName="Expander" />
> </Trigger>
> <Trigger Property="IsSelected" Value="true">
> <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"
> TargetName="Selection_Border" />
> <Setter Property="Foreground" Value="{DynamicResource {x:Static
> SystemColors.HighlightTextBrushKey}}" />
> </Trigger>
> <MultiTrigger>
> <MultiTrigger.Conditions>
> <Condition Property="IsSelected" Value="true" />
> <Condition Property="IsSelectionActive" Value="false" />
> </MultiTrigger.Conditions>
> <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"
> TargetName="Selection_Border" />
> <Setter Property="Foreground" Value="{DynamicResource {x:Static
> SystemColors.HighlightTextBrushKey}}" />
> </MultiTrigger>
> <Trigger Property="IsEnabled" Value="false">
> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
> </Trigger>
> </ControlTemplate.Triggers>
> </ControlTemplate>
> </Setter.Value>
> </Setter>
> </Style>
> <!-- Style for the ToggleButton control used to expand/collapse a TreeViewItem control -->
> <Style TargetType="{x:Type ToggleButton}">
> <Setter Property="Focusable" Value="False" />
> <Setter Property="Width" Value="19" />
> <Setter Property="Height" Value="13" />
> <Setter Property="Template">
> <Setter.Value>
> <ControlTemplate TargetType="{x:Type ToggleButton}">
> <Border Width="19" Height="13" Background="#00FFFFFF" x:Name="Border">
> <Border Width="9" Height="9" x:Name="Border1" SnapsToDevicePixels="True" BorderBrush="#FF9495A2"
> BorderThickness="1,1,1,1" CornerRadius="1,1,1,1">
> <Border.Background>
> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
> <GradientStop Color="#FFFFFFFF" Offset="0.4" />
> <GradientStop Color="#FFC6CEDA" Offset="1" />
> </LinearGradientBrush>
> </Border.Background>
> <Path Fill="#FF000000" Margin="1,1,1,1" x:Name="ExpandPath" Data="M0,2L0,3 2,3 2,5 3,5 3,3
> 5,3 5,2 3,2 3,0 2,0 2,2z" />
> </Border>
> </Border>
> <ControlTemplate.Triggers>
> <Trigger Property="IsChecked" Value="True">
> <Setter Property="Data" Value="M0,2L0,3 5,3 5,2z" TargetName="ExpandPath" />
> </Trigger>
> </ControlTemplate.Triggers>
> </ControlTemplate>
> </Setter.Value>
> </Setter>
> </Style>
> <DataTemplate DataType="{x:Type nodes:MonitorNode}">
> <StackPanel Orientation="Horizontal" Margin="0 2 0 0">
> <Image Source="{Binding ImageSource}" Width="16" Height="16" Margin="0 0 3 0" />
> <TextBlock Text="{x:Static ml:MultiLang._157}" x:Name="ML_0048" />
> <TextBlock Text="{Binding ID}" />
> <TextBlock Text="{x:Static ml:MultiLang._158}" x:Name="ML_0050" />
> <TextBlock Text="{Binding Name}" />
> </StackPanel>
> </DataTemplate>
> <HierarchicalDataTemplate DataType="{x:Type nodes:StationNode}" ItemsSource="{Binding Children}">
> <StackPanel Orientation="Horizontal" Margin="0 2 0 0">
> <StackPanel.ContextMenu>
> <ContextMenu HasDropShadow="True">
> <MenuItem Header="{x:Static ml:MultiLang._160}" Command="{Binding CopyMonitorsCommand}"
> x:Name="ML_0055" />
> <MenuItem Header="{x:Static ml:MultiLang._159}" Command="{Binding PasteMonitorsCommand}"
> x:Name="ML_0056" />
> <MenuItem Header="{x:Static ml:MultiLang._162}" Command="{Binding CopyStationsCommand}"
> x:Name="ML_0057" />
> <MenuItem Header="{x:Static ml:MultiLang._161}" Command="{Binding PasteStationsCommand}"
> x:Name="ML_0058" />
> </ContextMenu>
> </StackPanel.ContextMenu>
> <Image Source="{Binding ImageSource}" Width="16" Height="16" Margin="0 0 3 0" />
> <TextBlock Text="{x:Static ml:MultiLang._157}" x:Name="ML_0060" />
> <TextBlock Text="{Binding ID}" />
> <TextBlock Text="{x:Static ml:MultiLang._158}" x:Name="ML_0062" />
> <TextBlock Text="{Binding Name}" />
> </StackPanel>
> </HierarchicalDataTemplate>
> <HierarchicalDataTemplate DataType="{x:Type nodes:FilteringNode}" ItemsSource="{Binding Children}">
> <StackPanel Orientation="Horizontal" Margin="0 2 0 0">
> <Image Source="{Binding ImageSource}" Width="16" Height="16" Margin="0 0 3 0" />
> <TextBlock Text="{Binding Name}" />
> </StackPanel>
> </HierarchicalDataTemplate>
> </TreeView.Resources>
> </TreeView>
> </UserControl>
Le courant de fond de la couleur ressemble à ceci:
Lorsqu'il est sélectionné, mais le foyer perdu la couleur de fond est:
J'ai juste envie de rester bleu !!!
Je vous remercie pour votre aide.
OriginalL'auteur S.K | 2014-02-06
Vous devez vous connecter pour publier un commentaire.
Dans le modèle par défaut de
TreeViewItem
, il est MultiDataTrigger qui définissez la couleur àControlBrushKey
lorsque l'élément n'est pas dans l'accent qui vous pouvez remplacer dans votre Arborescence de ressources comme ceci:il n'est pas nécessaire de remplacer ControlTemplate de TreeViewItem.
Mais, cependant, il a également établi le texte de treeViewItem à
ControlTextBrushKey
qui par défaut est le noir. Ainsi, avec seulementControlBrushKey
surchargé, vous obtiendrez ceci:Sans Accent:
Avec L'Accent
Comme vous pouvez le voir de la brosse est monté correctement, mais si vous remplacez
ControlTextBrushKey
et blanc que l'arborescence de l'Élément ne sera pas visible depuis controlTextBrush sera mis à blanc.Toutefois, dans le cas où vous voulez exactement la même apparence de TreeViewItem comme il l'a fait avec le focus, vous devez remplacer les modèles de contrôle et de supprimer MultiDataTrigger à partir du modèle par défaut.
Modèle par défaut va aller comme ça:
Pas de problème S. K. Heureux de vous aider..!!
P. S, j'ai obtenu plus de la foregroud problème couleur en peignant en noir lorsqu'il est sélectionné.
cela fonctionne pour moi (en ce qui concerne la couleur passe) à l'exception du bouton à bascule de ne pas ouvrir l'élément plus. 🙁
J'ai donc changé le IsChecked sur le ToggleButton à IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}", et maintenant ça fonctionne.
OriginalL'auteur Rohit Vats
En référence à cette autre post, le
ControlBrushKey
ne fonctionne pas pour moi. LeInactiveSelectionHighlightBrushKey
n'a, cependant. Aussi le réglage de laInactiveSelectionHighlightTextBrushKey
obtenu autour de l'évolution de la couleur du texte.Ma solution complète:
OriginalL'auteur Mike Richards