将触发值绑定到 属性

Bind trigger value to a property

我正在尝试设置一个触发器,这样如果两个值匹配发生颜色变化,当要匹配的东西是静态的并且可以直接放入 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>

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

为此,您可以使用 DataTriggers,如下例所示(TextBlock 命名为 txtBlock 颜色变化取决于值 "R" 或 "N"):

<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. Also, you may consider MultiDataTrigger, or DataTrigger with MultiBinding (re: MultiDataTrigger vs DataTrigger with multibinding).

希望这可能有所帮助。