1

我有 ac# 业务应用程序(仍然针对 .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 的情况下执行应用程序时,未聚焦的Datagrid 行的前景文本颜色为White。在安装了 .net 4.5 的情况下执行应用程序时,未聚焦的Datagrid 行的前景文本颜色为Black

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

对我来说,这是就地更新的重大变化。我所有的客户都应该获得完全相同的用户体验,而与安装的版本无关。

我在MSDN .net 4.5 Application Compatibility上也找不到有关此问题的任何信息

4

2 回答 2

2

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

这就是为什么在 xaml 中覆盖 SystemColors 以更改选择颜色,即使是一个不错的技巧,也不是一个好的做法。

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

于 2012-11-16T12:15:43.743 回答
0

您可以按照@Sisyphe 的建议进行操作,或者您可以继续“作弊”!我们不得不将此添加到Style.Resources列表中以解决相同的问题

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

https://stackoverflow.com/a/13053511/1811110

于 2013-07-18T23:19:53.130 回答