Почему я не могу написать такой код
<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
Что я делаю не так, пожалуйста, помогите.
Абэ прав и хорошо объясняет ограничения. Одна вещь, которую вы, возможно, захотите рассмотреть, это:
Вместо того, чтобы иметь два стиля границы и пытаться выбирать между ними на основе триггера...
Используйте один стиль на вашей границе, установщики этого стиля представляют ваши «нормальные» ' Посмотрите. Этот стиль также содержит ваш DataTrigger, а ваш DataTrigger имеет набор сеттеров, которые по существу представляют ваш второй стиль (которые имеют более высокий приоритет, чем стандартные сеттеры, когда этот триггер оценивается как true!
Изменить:
Что-то вроде этого -
<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>
К сожалению, непосредственно к элементам можно применять только Триггеры событий
. Если вы хотите использовать Trigger
или DataTrigger
, они должны быть в Style
, ControlTemplate
или DataTemplate
.
Судя по названиям ресурсов, это Border
внутри ListBoxItem
ControlTemplate
. Вы можете легко переместить триггеры в коллекцию триггеров шаблона.