将触发器值绑定到属性

时间:2015-06-04 18:36:02

标签: c# wpf xaml triggers

我试图设置一个触发器,所以如果两个值匹配发生颜色变化,当匹配的东西是静态的并且可以放在xaml中时很容易,但是当要比较的东西是动态的,如财产。反正基本上是将触发器的值绑定到属性?

示例 - 错误表示值无法使用绑定。这让我认为价值必须是静态的。

<TextBlock Name="MyTextBlock" Text="{Binding someProp}">
    <TextBlock.Resources>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=MyTextBlock, Path=Text}" Value="{Binding someOtherProperty}">
                    Do some stuff here
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Resources>
</Textblock>

编辑:将其更新为数据触发器,但问题仍然存在。

1 个答案:

答案 0 :(得分:3)

为此目的,您可以使用DataTriggers,如下例所示(TextBlock名为txtBlock颜色变化取决于值&#34; R&#34;或&#34 ; N&#34):

<Style.Triggers>
    <DataTrigger Binding="{Binding ElementName=txtBlock,Path=Text}" Value="R">
            <Setter Property="Background" Value="#f9f9f9" />
            <Setter Property="Foreground" Value="Red" />
    </DataTrigger>
    <DataTrigger Binding="{Binding ElementName=txtBlock,Path=Text}" Value="N">
        <Setter Property="Background" Value="Yellow" />
        <Setter Property="Foreground" Value="Black" />
    </DataTrigger>
</Style.Triggers>

解决方案适用于条件中使用的任何有限数据集。对于更复杂的条件(例如条件块中使用的变量等),您可以在代码隐藏中实现值转换器和绑定,如示例中所示:Binding in WPF DataTrigger value。此外,您可以将MultiDataTriggerDataTriggerMultiBinding(re:MultiDataTrigger vs DataTrigger with multibinding)一起考虑。

希望这可能会有所帮助。