【问题标题】:Multiple Datatriggers overwrite多个数据触发器覆盖
【发布时间】:2019-03-28 10:43:58
【问题描述】:
<Style.Triggers>
        <DataTrigger Binding="{Binding Result.IsRejected}" Value="True">
            <Setter Property="Foreground" Value="Green"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.RilibakViolation}" Value="True">
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.RilibakViolation}" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource ControlsForegroundColor}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.IsViolated}" Value="True">
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.IsViolated}" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource ControlsForegroundColor}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.ResultIncluded}" Value="False">
            <Setter Property="Foreground" Value="IndianRed"/>
        </DataTrigger>

    </Style.Triggers>

我有这段代码,我尝试根据该 Result 对象的不同属性更改前景色。我的问题是只有最后 3 个工作和 IsRejected 或 RilibakViolation 不起作用。例如:即使第一个为真,它也不会显示为绿色。此代码是否有另一种方法使其适用于所有这些情况?

【问题讨论】:

  • 你测试过Result的哪些状态?您的所有触发器都会更改 Foreground,因此最新的触发器会胜出。

标签: c# wpf xaml datatrigger


【解决方案1】:

一个好方法是创建一个 MultiConverter 并传递所有必要的属性(IsRejected、RilibakViolation、IsViolated 等)。转换器将接收参数,然后决定返回哪种颜色。

这样,每当模型中的一个属性发生变化时,转换器就会被激活,Foreground 也会相应地发生变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多