我有一个WPF DataGrid,其中有一些列需要包含蓝色文本。这是按规范,不能更改。
现在,这通常不会成为问题,但是当用户在网格中选择一行时,该行会以蓝色突出显示,就像所有版本的Windows中一样。
这是有问题的,因为行变得难以阅读:
(请注意,上面的图片来自Win10,其中选择的蓝色很轻,但在客户端的机器上,即Windows Server 2008,“选择蓝色”更暗,文本基本上不可读)< / p>
所以我尝试将以下样式应用于该特定列的单元格:
<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。有谁知道怎么做?
答案 0 :(得分:2)
经过更多的试验和错误以及来自Ed Plunkett的有用提示后,heeres完整的解决方案:
<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>