为什么我不能像这样编码
<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>
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
Failed object initialization (ISupportInitialize.EndInit).
Triggers collection members must be of type EventTrigger.
Error at object '4_T' in markup file
Run Code Online (Sandbox Code Playgroud)
我做错了什么错误的帮助.
Sco*_*ott 31
安倍是正确的,并很好地解释了这些局限性.您可能想要考虑的一件事是:
而不是有两种边框样式,并试图根据触发器在它们之间进行选择......
在边框上使用单一样式,此样式的设置器代表您的"正常"外观.这个样式还包含你的DataTrigger,你的DataTrigger有一组setter,它们基本上代表你的第二种风格(当这个触发器的评估结果为真时,它的优先级高于标准的setter!
编辑:
像这样的东西 -
<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>
Run Code Online (Sandbox Code Playgroud)
Abe*_*cht 18
不幸的是,只能EventTriggers直接应用于元素.如果你想使用一个Trigger或者DataTrigger,他们是在一个Style,ControlTemplate或DataTemplate.
从资源名称来看,它看起来像是一个Border内部的ListBoxItem ControlTemplate.您可以轻松地将触发器移动到模板的触发器集合中.