DataGridRow的DataTrigger背景颜色

时间:2011-03-23 13:52:59

标签: wpf xaml binding triggers styles

如果我的项目很关键,我尝试绑定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 - &gt; False&amp;&amp; Alternate)但绑定失败。我还尝试将两个触发器放在StyleControlTemplate中,但仍无法正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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 Trigger的setter的优先级从Style触发器向前移动。