ItemContainerStyle блокирует ItemContainerStyleSelector - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть код:

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

1 Ответ

6 голосов
/ 15 декабря 2011

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