c# - 将触发器值绑定(bind)到属性

标签 c# wpf xaml triggers

我正在尝试设置一个触发器,以便如果两个值匹配发生颜色变化,当要匹配的事物是静态的并且可以直接放入 xaml 中时这很容易,但是当要比较的事物是动态的时,这很容易,比如属性(property)。基本上有没有办法将触发器的值绑定(bind)到属性?

示例 - 错误表示值不能使用绑定(bind)。这让我认为值(value)必须是静态的。

<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,如下例所示(名为 txtBlockTextBlock 颜色变化取决于值“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>

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

希望这可能有所帮助。

关于c# - 将触发器值绑定(bind)到属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651569/

相关文章:

c# - 清除 XmlTextWriter 和 StringWriter 中的所有内容

c# - 选择功能区选项卡时更改 ViewModel

wpf - 为什么 Wpf Popup.IsOpen=true 从 ListBox 保持打开状态?

wpf - RenderTransform.TranslateTransform 在 wpf 中的用户控件中进行动画处理

WPF 多个值的一个触发器

c# - 防止字典中的对象修改

c# - 从网页中抓取内容

c# - 获取Unity中所有标签的列表

XAML 文本框在应用控件模板后变得不可编辑

c# - 在多列中显示 ComboBoxItems