2012-03-26 5 views
2

Deuxième question du jour mais heureusement simple, j'ai juste besoin de changer la couleur de premier plan de l'élément sélectionné dans mon contrôle de la liste.ListBox Couleur du texte sélectionné

Je le style suivant (qui change l'arrière-plan sur la sélection mais pas la couleur de premier plan):

<Style TargetType="ListBoxItem" x:Key="PinnedListBoxItem"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF9CC164"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FF9CC164"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="White"/> 
    </Style.Resources> 
</Style> 

Cela ne fonctionne pas non plus

<Style TargetType="ListBoxItem" x:Key="PinnedListBoxItem"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF9CC164"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FF9CC164"/> 
    </Style.Resources> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Foreground" Value="White"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Je ListBox suivant:

   <ListBox Style="{StaticResource PinnedList}" Height="Auto" MaxHeight="200" Visibility="Hidden" HorizontalAlignment="Left" Margin="-8,45,0,0" SelectionChanged="ui_lsbPinnedORGs_SelectionChanged" 
        SelectedItem="{Binding Path=SelectedPinnedORGsViewModel, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, Mode=TwoWay}" 
        SelectionMode="Single" ItemsSource="{Binding Path=ORGViewModels, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, Mode=TwoWay}" 
        ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" MouseEnter="ui_lsbPinnedORGs_MouseEnter" 
        VerticalAlignment="Top" Width="158" Name="ui_lsbPinnedORGs" ItemContainerStyle="{StaticResource PinnedListBoxItem}"> 
       <ListBox.ItemTemplate> 
        <HierarchicalDataTemplate> 
         <Label Content="{Binding Path=ORG.Acronym, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}" /> 
        </HierarchicalDataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
+0

voulez-vous changer sur un événement de clic ou juste le changer de façon permanente? –

+0

Sur un clic, puis revenez à la valeur par défaut (noir) une fois non sélectionné. –

Répondre

14

Vous devez utiliser un déclencheur de base comme:

<Style TargetType="ListBoxItem"> 
    ... 
    <Style.Triggers> 
    <Trigger Property="IsSelected" Value="True"> 
     <Setter Property="Foreground" Value="Color"/> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

MISE À JOUR

Avec le modèle actuel:

<ListBox.ItemTemplate> 
    <HierarchicalDataTemplate> 
     <Label Content="{Binding}" Foreground="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem, Mode=FindAncestor}, Path=Foreground}" /> 
    </HierarchicalDataTemplate> 
</ListBox.ItemTemplate> 
+0

Ne fonctionne pas du tout - a été la première chose que j'ai essayé. –

+0

Peut-être quelque chose à voir avec la façon dont la ListBox est implémentée? –

+1

C'est parce que vous utilisez datatemplate. Le premier plan de ListBoxItem est en effet changé. Le premier plan de l'étiquette dans le modèle hiérarchique ne le fait pas. –

0

Est-ce que ce Setter fait ce que vous voulez?

<Style TargetType="ListBoxItem" x:Key="PinnedListBoxItem"> 
     <Style.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF9CC164"/> 
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FF9CC164"/> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="White"/> 
     </Style.Resources> 
     <Setter Property="Foreground" Value="Aqua"/> 
    </Style> 
+1

Non, les propriétés Setter par défaut ne fonctionnent pas pour ListBox - c'est pourquoi je surcharge la classe SystemColors pour la sélection de l'arrière-plan. Les deux cas ont été testés et ne fonctionnent pas quelle que soit la sélection. –

Questions connexes