多个属性的一个 DataTrigger

One DataTrigger for multiple properties

我有一个绑定到 Observable 集合的列表视图,列表视图的属性中的大多数将使用相同的触发器。 是否可以在资源部分定义一次触发器,并在属性需要时仅引用它?

到目前为止我是这样的:

<Style TargetType="TextBlock" x:Key="Pstyle">
        <Setter Property="Text" Value="Testing"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding P1}" Value="Testing">
                <Setter Property="Foreground" Value="DarkGreen"/>
                <Setter Property="FontWeight" Value="Bold"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

在列表视图成员中,我只是将定义的样式应用到属性 P1

 Style="{DynamicResource Pstyle}"

但是如何为 P2、P3、P4 应用相同定义的触发器...

由于您想将触发逻辑放在 TextBlock 的内容上,我认为您应该使用 Trigger 定位 Text 属性,而不是DataTrigger.

查看示例代码:

<Style TargetType="TextBlock" x:Key="Pstyle">
    <Style.Triggers>
        <Trigger Property="Text" Value="Testing">
            <Setter Property="Foreground" Value="DarkGreen"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Trigger>
    </Style.Triggers>
</Style>

<TextBlock Name="MyTextBlock1" Text="MyTextBlock1Text" Style="{StaticResource Pstyle}"/>
<TextBlock Name="MyTextBlock2" Text="MyTextBlock2Text" Style="{StaticResource Pstyle}"/>
<TextBlock Name="MyTextBlock3" Text="MyTextBlock3Text" Style="{StaticResource Pstyle}"/>

如您所见,只有一种样式应用于不同的 Textblocks。

那么你应该根据你的列表视图调整它。