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

4
我希望能够在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**"/>

谢谢你!

1
我不相信你能做到。我认为当你在DataTrigger中绑定属性时,它会尝试在数据上下文中查找该属性。 - Ricardo Serra
谢谢!你的提示帮助我找到了解决方案。 - Stefan
2个回答

5
解决方案看起来很整洁,也不太难。
我需要绑定(在这种情况下)我的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}"/>

我希望这能帮助到一些人!

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接