繁体   English   中英

WPF DataGrid:使用触发器更改单元格前景色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM