使用ResourceDictionary中的DataTrigger定义一般样式,但在视图

时间:2017-03-17 15:32:51

标签: .net wpf xaml binding resourcedictionary

我想使用带有ResourceDictionary的样式在DataTrigger中定义控件的一般外观。

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

我的目标是重用图形定义(包括触发器),但每次使用时都会将触发器链接到不同的数据源。

示例样式:

<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**"/>

谢谢!

2 个答案:

答案 0 :(得分:3)

解决方案显得非常整洁而且不太困难。

我必须将DataContext(在这种情况下)我的Rectangle绑定到我想要的属性。然后我必须将我的风格的触发器绑定到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}"/>

我希望它有所帮助!

答案 1 :(得分:1)

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