【发布时间】:2016-04-11 16:24:43
【问题描述】:
我有一个 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本身没有焦点时,行转动灰色,这会使事情混淆: p >
我试着弄乱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。有人知道怎么做吗?
【问题讨论】:
-
尝试将
{Binding ElementName=gridAvanzamenti, Path=IsFocused}更改为{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=IsFocused}- 不过,您确实提到了尝试查找祖先,所以这是一个远景。 -
谢谢。那是一半的答案。另一个条件也需要改变。我会发布完整的解决方案。