我尝试应用样式,以便某些Border元素的边框大小和颜色增加如下:
<Border Name="AlarmBorder">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{Binding AlarmPriority.BackColour, Converter={StaticResource PriorityBrush}}" />
</Setter.Value>
</Setter>
<Setter Property="BorderBrush">
<Setter.Value>
<SolidColorBrush Color="{Binding AlarmPriority.BackColour, Converter={StaticResource PriorityBrush}}" />
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OPCAlarm.OPCAlarmTriggered}" Value="True">
<Setter Property="BorderThickness" Value="10"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=OPCAlarm.OPCAlarmTriggered}" Value="False">
<Setter Property="BorderThickness" Value="1"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
这会增加边框粗细,但不会应用颜色。如果我将Colors移动到Border标签内,如下所示:
<Border Name="AlarmBorder" BorderBrush="{Binding AlarmPriority.BackColour, Converter={StaticResource PriorityBrush}}">
我得到了正确颜色的边框。
因此,应用@样式级别的颜色不会被应用(但BorderThickness属性会应用),但在元素级别,颜色会通过。
有人能告诉我我做错了吗?
由于
答案 0 :(得分:1)
行为归因于Dependency property value precedence。
本地设置属性优先于样式设置器 ,因此,如果设置本地值,无论您在Style DataTriggers中设置什么,都不会应用。< / p>
您需要将其移动到样式设置器,以便可以使用样式DataTriggers 切换它。
<Border Background="Red">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="Green"/>
</Style>
</Border.Style>
</Border>
与上面的示例一样,border始终为Red
,因为它比样式设置器具有更高的优先顺序。
优先顺序:
<强>更新强>
您正在使用PriorityBrush
转换器,我猜它已经将Color
转换为Brush
,因此直接绑定到后台(无需创建另一个画笔)。这将有效:
<Setter Property="BorderBrush"
Value="{Binding AlarmPriority.BackColour,
Converter={StaticResource PriorityBrush}}"/>
如果转换器仅从Color转换为Brush,则可以完全省略,并执行以下操作:
<Setter.Value>
<SolidColorBrush Color="{Binding AlarmPriority.BackColour}"/>
</Setter.Value>