【问题标题】:DataTrigger for DataGridRow background colorDataGridRow 背景颜色的 DataTrigger
【发布时间】:2011-07-21 08:19:45
【问题描述】:

如果我的项目很重要,我会尝试绑定 DataGridRow 触发器以将背景设置为红色。否则,我想要AlternatingRowBackground。这是我目前所拥有的:

<ControlTemplate.Triggers>
  <DataTrigger Binding="{Binding IsCritical}" Value="True">
    <Setter Property="Background" Value="Red" />
  </DataTrigger>
</ControlTemplate.Triggers>

它工作正常,但它禁用了AlternatingRowBackground(我在某处读到它是正常的)。所以我想手动完成并自己设置行背景:

<Style.Triggers>
  <Trigger Property="AlternationIndex" Value="0">
    <Setter Property="Background" Value="White" />
  </Trigger>
  <Trigger Property="AlternationIndex" Value="1">
    <Setter Property="Background" Value="WhiteSmoke" />
  </Trigger>
</Style.Triggers>

但是这样做它永远不会变成红色(关键绑定触发器)。我试过MultiDataTrigger 并且有两个条件(IsCritical -> False && Alternate),但绑定失败。我还尝试将两个触发器放在StyleControlTemplate 中,仍然不起作用。

有什么想法吗?

【问题讨论】:

    标签: wpf xaml binding triggers styles


    【解决方案1】:

    Style 触发器的优先级高于 ControlTemplate 触发器,如 here 所述。

    您可以做的是“定位”使用背景画笔的元素并直接设置它。因此,您的 ControlTemplate 中可能有以下内容:

    <Border Background="{TemplateBinding Background}" ... >
    

    您可以将其更改为:

    <Border x:Name="border" Background="{TemplateBinding Background}" ... >
    

    然后将您的 ControlTemplate DataTrigger 更改为:

    <ControlTemplate.Triggers>
        <DataTrigger Binding="{Binding IsCritical}" Value="True">
            <Setter TargetName="border" Property="Background" Value="Red" />
        </DataTrigger>
    </ControlTemplate.Triggers>
    

    这会将 ControlTemplate 触发器的设置器的优先级从样式触发器上移到前面。

    【讨论】:

    • 我还可以将DataTriggerTriggerControlTemplate 反转为Style 以反转优先级。
    • @Philippe - 没错。任何给定集合中的最后一个触发器将“获胜”。
    猜你喜欢
    • 2014-07-07
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多