【问题标题】:.net 4.5: DataGrid - foreground color behavior changed.net 4.5:DataGrid - 前景色行为改变
【发布时间】:2012-11-05 03:36:45
【问题描述】:

我有一个 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>

颜色:&lt;Color x:Key="ItemSelectedFocusedColor"&gt;#88087ED1&lt;/Color&gt;

在安装了 .net 4 的情况下执行应用程序时,unfocused Datagrid 行的前景文本颜色为 White。 执行安装了 .net 4.5 的应用时,unfocused Datagrid 行的前景文本颜色为 Black。

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

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

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

【问题讨论】:

  • 我想帮忙。您能否将重现 Microsoft dot com 的 netfx45compat 问题的代码发送给我?您能否确认代码在 .NET4.5 和 Windows7 上正常工作,但您发现 .NET4.5 和 Windows8 存在问题?此致,.NET Framework 兼容性团队 Varun Gupta
  • 我仍在 Windows 7 上执行 相同的二进制文件。首先,安装 .net 4.0,然后安装 .net 4.5。还没有在 Windows 8 上尝试过,这甚至不是重点。还是要我把代码发给你吗?

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


【解决方案1】:

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

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

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

【讨论】:

  • 可能是这样。尽管如此,这种新行为对于就地更新来说是不可接受的。 Microsoft 不能期望我覆盖应用程序中使用的每个控件的控件模板。如果这样做,我也必须复制 .net 4.0 框架代码...
  • 事实上,我更改了选择颜色,但我从未设置前景色。所以看起来,他们改变了前景色的颜色计算代码。所以这可能与他们模板中的触发器无关。
  • 这也可能改变了前台计算。实际上我同意一件事,很奇怪他们没有在他们的所有 ItemsControl 中为选择颜色提供一个简单的入口点。在应用程序中覆盖这种事情是很常见的事情。话虽如此,覆盖 ControlTemplate/Style 并不难;)
【解决方案2】:

你可以按照@Sisyphe 的建议去做,或者你可以继续“作弊”! 我们必须将此添加到Style.Resources 列表中才能解决相同的问题

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

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

【讨论】:

    猜你喜欢
    • 2013-01-30
    • 2012-02-15
    • 2016-05-22
    • 2021-03-10
    • 2020-04-18
    • 2020-07-28
    • 2018-02-14
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多