[英]WPF DataGrid: changing cell foreground color with triggers
我有一个WPF DataGrid,其中包含一些需要在其中包含蓝色文本的列。 这是规范规定的,无法更改。
现在,这通常不会有问题,但是,当用户在网格中选择一行时,该行将以蓝色突出显示,这在所有版本的Windows中都是常见的。
这是有问题的,因为该行变得难以阅读:
(请注意,上面的图像来自Win10,其中选择的蓝色非常浅,但是在客户端计算机(即Windows Server 2008)上,“选择蓝色”要暗得多,并且文本基本上不可读)
因此,我尝试将以下样式应用于该特定列的单元格:
<Style TargetType="DataGridCell" x:Key="styleBlueCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="False">
<Setter Property="Foreground" Value="Blue"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
这几乎可以完美地工作...但是在一种情况下:当选择了一行,但是DataGrid本身没有焦点时,该行变为灰色,这使事情变得混乱:
我试图弄乱MultiTriggers,就像这样:
<Style TargetType="DataGridCell" x:Key="styleBlueCell2">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=gridAvanzamenti, Path=IsFocused}" Value="False"/>
<Condition Binding="{Binding IsSelected}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="Blue"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
但是无论我尝试什么(通过元素名称绑定,查找祖先等),我似乎都无法绑定到父级DataGrid。 有人知道怎么做吗?
经过更多的试验和错误以及Ed Plunkett的有用提示后,请参考完整的解决方案:
<Style TargetType="DataGridCell" x:Key="styleBlueCell">
<Style.Setters>
<Setter Property="Foreground" Value="Blue"/>
</Style.Setters>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=IsKeyboardFocusWithin}" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsSelected}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="White"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.