我有一个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的应用程序时,未聚焦数据网格行的前景文本颜色为黑色。
如果数据网格具有焦点,则行为相同。 (两个版本中均为白色)
对我而言,这是就地更新的重大变化。我的所有客户都应该独立于已安装的版本获得完全相同的用户体验。
上找到有关此问题的任何信息答案 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}"/>