有没有办法重用属性设置器金额触发器

时间:2009-07-11 20:35:19

标签: wpf triggers

在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是相同的,如果只有一个变化点就会很好。

2 个答案:

答案 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。