在 ResourceDictionary 中使用 DataTrigger 定义样式,但在视图中指定 DataTrigger 绑定路径

Defining a Style with a DataTrigger in ResourceDictionary but specify the DataTrigger binding path in the view

我想在 ResourceDictionary 中使用具有 DataTrigger.

的样式定义控件的一般外观

是否可以在视图中指定DataTrigger绑定路径? 如果没有,是否有一些巧妙的替代方法可以实现我的目标?

我的目标是重用图形定义(包括触发器),但 link 每次使用触发器时都指向不同的数据源。

示例样式:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="Rectangle" x:Key="LedBehavior">
        <Setter Property="Fill" Value="LightGray"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding **DefineThisPathInTheView**}" Value="True">
                <Setter Property="Fill" Value="DarkGreen"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

</ResourceDictionary>

在视图中我希望使用这种样式有点像这样:

<Rectangle Width="50" Height="50" 
           Style="{StaticResource LedBehavior}"
           DataTriggerBindingPath="**PropertyInViewModel**"/>

谢谢!

解决方案看起来非常简洁而且不太难。

我必须将(在本例中)我的 RectangleDataContext 绑定到我想要的 属性。然后我必须以我的风格将触发器绑定到 DataContext.

下面的工作示例。

示例样式:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="Rectangle" x:Key="LedBehavior">
        <Setter Property="Fill" Value="LightGray"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding}" Value="True">
                <Setter Property="Fill" Value="DarkGreen"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

</ResourceDictionary>

示例(部分)视图:

<Rectangle Width="50" Height="50" 
           Style="{StaticResource LedBehavior}"
           DataContext="{Binding PropertyInViewModel}"/>

希望对大家有所帮助!

如果您不想使用 DataContext,您可以使用附加属性并绑定到它。