2009-10-16 77 views
1

改變所選項目的前景我有此XAMLWPF SystemColors.HighlightTextBrushKey IsFrozen = True;如何在ListBox控件

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
    Value="#123456"/>   
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" 
    Value="White"/> 

的第一個工程,第二個沒有。在MSDN,SystemColors.HighlightTextBrushKey說,它「ISFROZEN」,不能改變的,所以我在風格嘗試這樣:

<Trigger Property="IsSelected" Value="true"> 
    <Setter Property="Foreground" Value="White" /> 
</Trigger> 

這也不起作用,任何指導將是很有益的,謝謝。

編輯 - 附加的XAML

<ListBox ItemContainerStyle="{DynamicResource ListBoxItemStyle}" 
     AlternationCount="2" 
     Margin="8,37,8,74" 
     x:Name="listClientOUContents" 
     HorizontalContentAlignment="Stretch"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid Height="22" HorizontalAlignment="Stretch"> 
        <Image Margin="-2,0,0,0" Source="{Binding Path=ADsPath, Converter={StaticResource ImxConverter}}" HorizontalAlignment="Left" Width="22" /> 
        <TextBlock HorizontalAlignment="Stretch" Margin="20,3,0,0" Text="{Binding Path=DisplayValue}" /> 
        <Rectangle HorizontalAlignment="Stretch" Fill="White" Stroke="White" Margin="-2,0,-2,0.5" VerticalAlignment="Bottom" Height="1" /> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

這裏是ItemContainerStyle我使用

<Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="FontSize" Value="12" /> 
     <Setter Property="FontFamily" Value="Tahoma" /> 
     <Setter Property="Background" Value="#006C3B3B"/> 
     <Style.Resources> 
      <!-- Selected and Focused --> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF533F70"/> 
      <!-- Selected and UN-focused --> 
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FF533F70"/> 
      <Storyboard x:Key="MouseOverStoryBoard"> 
       <ColorAnimationUsingKeyFrames AutoReverse="True" BeginTime="00:00:00" Storyboard.TargetName="{x:Null}" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
        <SplineColorKeyFrame KeyTime="00:00:00" Value="#FFF48F21"/> 
        <SplineColorKeyFrame KeyTime="00:00:00.5000000" Value="#FF4A475C"/> 
       </ColorAnimationUsingKeyFrames> 
      </Storyboard> 
     </Style.Resources> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="true"> 
       <Setter Property="Foreground" Value="White" /> 
      </Trigger> 
      <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
       <Setter Property="Background"> 
        <Setter.Value> 
         <SolidColorBrush Color="#a1a1a1"/> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="Foreground" Value="black"/> 
      </Trigger> 
      <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
       <Setter Property="Background" Value="#a1a1a1"/> 
       <Setter Property="Foreground" Value="black"/> 
      </Trigger> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Trigger.EnterActions> 
        <BeginStoryboard Storyboard="{StaticResource MouseOverStoryBoard}"/> 
       </Trigger.EnterActions> 
       <Setter Property="Foreground" Value="White" /> 
       <Setter Property="Background" Value="#FFF48F21"/> 
       <Setter Property="FontStyle" Value="Normal"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
+0

你能展示更多的XAML(列表框元素和列表框中包含的所有相關元素)嗎? – Scott 2009-10-16 18:02:38

+0

是的......我用更多的xaml編輯了這個問題。 – Nate 2009-10-16 18:20:43

回答

1

編輯:切換你的 'IsSelected' 觸發和你「ItemsControl.AlternationIndex順序'trigger:

<Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <SolidColorBrush Color="#a1a1a1"/> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Foreground" Value="black"/> 
</Trigger> 
<Trigger Property="IsSelected" Value="true"> 
    <Setter Property="Foreground" Value="White" /> 
</Trigger> 

The列表中的最後一個觸發器優先,因此您的AlternationIndex正在覆蓋您的IsSelected觸發器。隨着IsSelected被列在AlternationIndex之後,現在應該優先考慮。