2012-03-26 97 views
2

當天的第二個問題,但希望很簡單,我只需要更改我的列表框控件中選定項目的前景色。列表框選定的文本顏色

我有以下樣式(更改上選擇背景,但不是前景色):

<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> 

這也不起作用

<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> 

我有以下列表框:

   <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

你想改就click事件或者只是永久地改變它? – 2012-03-26 19:27:42

+0

點擊一下,然後一旦未選中就變​​回默認(黑色)。 – 2012-03-26 19:31:42

回答

14

您應該使用基本觸發條件:

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

UPDATE

隨着當前模板:

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

完全不起作用 - 是我嘗試的第一件事。 – 2012-03-26 19:42:49

+0

也許與ListBox的實現方式有關? – 2012-03-26 19:48:51

+1

這是因爲您正在使用數據模板。 ListBoxItem的前景確實發生了變化。分層模板中的標籤的前景沒有。 – 2012-03-26 19:50:33

0

這個安裝程序做你想做的嗎?

<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

沒有默認的Setter屬性不適用於ListBox - 這就是爲什麼我重寫SystemColors類的背景選擇。 兩種情況下都經過測試,無論選擇何種方式都不起作用。 – 2012-03-26 19:36:50