在WPF中是否有一些机制可以重用不同触发器的属性设置器?例如,我有以下内容。
<Style TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Content" Value="Not Connected" />
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding IsConnected}" Value="False">
<Setter Property="Content" Value="Not Connected" />
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding IsConnected}" Value="True">
<Setter Property="Content" Value="Connected" />
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
Null和False的setter是相同的,如果只有一个变化点就会很好。
答案 0 :(得分:3)
您始终可以创建如下资源:
<Setter x:Key="setter1" Property="Content" Value="Not Connected" />
但是,您不能将资源键用作集合中的对象。
你可以设置某个地方
<SomeObject Setter="{StaticResource setter1}"/>
但Setters几乎总是添加到集合中,您无法在xaml集合语法中添加资源键。
我能想到的唯一支持这种情况的方案是用这两组相同的Setter创建一个SetterBaseCollection资源,
<SetterBaseCollection x:Key="settersKey">
<Setter Property="Label.Content" Value="Not Connected" />
<Setter Property="Label.Foreground" Value="Red" />
</SetterBaseCollection>
<Style TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}" Setters="{StaticResource settersKey}"/>
// ...
</Style.Triggers>
</Style>
但DataTrigger.Setters集合属性是只读的,不能从xaml设置。
所以,答案是否定的。
答案 1 :(得分:1)
在这种特殊情况下,最好将未连接的情况作为默认情况(没有条件),并且只为不同的情况创建一个DataTrigger。