Почему я не могу добавить DataTrigger в свою коллекцию триггеров управления?

Почему я не могу написать код

<Border Width="130" Height="70">
    <Border.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="0">
            <Setter Property="Style" Value="{StaticResource ResourceKey=ListBoxItemBorder}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="200">
            <Setter Property="Style" Value="{StaticResource ResourceKey=ListBoxItemBorderInactive}"/>
        </DataTrigger>
    </Border.Triggers>
</Border>

Я получаю эту ошибку

Failed object initialization (ISupportInitialize.EndInit). 
Triggers collection members must be of type EventTrigger.  
Error at object '4_T' in markup file

Что я делаю неправильно с помощью plz.

Ответы

Ответ 1

Abe верен и хорошо объясняет ограничения. Одна вещь, которую вы можете рассмотреть:

Вместо того, чтобы иметь два стили границы и пытаться выбрать между ними на основе триггера...

Используйте один стиль на вашей границе, этот стиль устанавливает ваш "нормальный" вид. Этот стиль также содержит ваш DataTrigger, и у вашего DataTrigger есть коллекция сеттеров, которая по существу представляет ваш второй стиль (который имеет более высокий приоритет, чем стандартные сеттеры, когда этот триггер оценивает значение true!

Edit:

Что-то вроде этого -

<Style TargetType="Border" x:Key="BorderStyle">
    <!-- These setters are the same as your normal style when none of your triggers are true -->
    <Setter Property="BorderBrush" Value="Black" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="0">
            <!-- These setters are the same as your ListBoxItemBorder style -->
            <Setter Property="BorderBrush" Value="Green" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=CurrentStatus}" Value="200">
            <!-- These setters are the same as your ListBoxItemBorderInactive style -->
            <Setter Property="BorderBrush" Value="Gray" />
        </DataTrigger>
    </Style.Triggers>
</Style>

Ответ 2

К сожалению, только EventTriggers может применяться непосредственно к элементам. Если вы хотите использовать Trigger или DataTrigger, они должны быть в Style, ControlTemplate или DataTemplate.

Из имен ресурсов это выглядит как Border внутри ListBoxItem ControlTemplate. Вы можете легко перемещать триггеры в коллекцию шаблонов шаблонов.