如果我的项目很关键,我尝试绑定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)但绑定失败。我还尝试将两个触发器放在Style
和ControlTemplate
中,但仍无法正常工作。
有什么想法吗?
答案 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触发器向前移动。