.net 4.5:DataGrid - 前景色行为发生了变化

时间:2012-11-16 11:55:27

标签: c# .net wpf .net-4.5

我有一个c#业务应用程序(仍然以.net 4.0为目标)。安装.net 4.5后,数据网格行的非活动前景颜色发生了变化。 (我没有重新编译,仍然执行相同的二进制文件)

似乎他们改变了前景色的对比色计算。

更多细节。 Datagrid的定义方式如下:

<DataGrid Background="White" AlternatingRowBackground="WhiteSmoke" ... />

我们还以这种方式为Datagrid定义了一个全局样式:

<Style TargetType="{x:Type DataGrid}">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{DynamicResource ItemSelectedFocusedColor}"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{DynamicResource ItemSelectedFocusedColor}"/>
    </Style.Resources>
</Style>

颜色:<Color x:Key="ItemSelectedFocusedColor">#88087ED1</Color>

执行安装了.net 4的应用程序时,未聚焦数据网格行的前景文本颜色为白色。 执行安装了.net 4.5的应用程序时,未聚焦数据网格行的前景文本颜色为黑色

如果数据网格具有焦点,则行为相同。 (两个版本中均为白色)

对我而言,这是就地更新的重大变化。我的所有客户都应该独立于已安装的版本获得完全相同的用户体验。

我也无法在MSDN .net 4.5 Application Compatibility

上找到有关此问题的任何信息

2 个答案:

答案 0 :(得分:2)

DataGrid和DataGridRow控件模板已在.NET4.0和.NET4.5版本之间进行了更改。根据选择和焦点负责颜色更改的触发器不再使用相同的SystemColors。

这就是为什么在xaml中覆盖SystemColors来改变选择颜色,即使是一个好的技巧,也不是一个好习惯。

您应该覆盖控件模板/样式,以使它们与您自己的画笔一起使用。这样,即使Microsoft决定更改其内置模板,您的代码也不会受到影响。

答案 1 :(得分:0)

你可以按照@Sisyphe的建议去做,或者你可以继续'作弊'! 我们必须将其添加到Style.Resources列表以解决同样的问题

<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>

请参阅https://stackoverflow.com/a/13053511/1811110