2011-12-15 5 views
0

У меня есть код:ItemContainerStyle блоки ItemContainerStyleSelector

<ListBox Style="{StaticResource DeviceListBox}" 
       ItemsSource="{Binding MeterList, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 
       SelectedItem="{Binding CurrentMeter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 
       ItemContainerStyleSelector="{StaticResource DeviceListItemStyleSelector}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Style="{StaticResource DeviceListText}" Text="{Binding Name}" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 

я использую ItemContainerStyleSelector="{StaticResource DeviceListItemStyleSelector}", чтобы изменить цвет фона в каждом из пунктов ListBox (например, черный или серебро, см - http://msdn.microsoft.com/en-us/library/system.windows.controls.styleselector.aspx). И это работает. Но если я добавлю ItemContainerStyle="{StaticResource DeviceListItemStyle}" для создания некоторых триггеров и т. Д. В DeviceListItemStyle, то DeviceListItemStyleSelector не работает. Помогите мне, пожалуйста!)

ответ

6

ItemContainerStyleSelector выбирает стиль, основанный на некоторой логике, поэтому, очевидно, что установка стиля вручную будет перезаписана независимо от того, какой стиль применял ваш селектор.

Почему бы вам не установить цвет фона в ItemContainerStyle?

<Style x:Key="DeviceListItemStyle" TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="Background" Value="Black" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsSilver}" Value="True"> 
      <Setter Property="Background" Value="Silver" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
Смежные вопросы