我只是升级了一些系统到Windows 10的创造者更新,我注意到,窗体PropertyGrid
控件改变了其默认的视觉样式的标题和栏边缘深灰色,如下所示:
而且大多数情况下发生意想不到的视觉变化,用户并不开心。 有没有办法恢复到旧的默认或可能覆盖默认样式?
PropertyGrid中有一个错误:
PropertyGrid.LineColor
的DefaultValue
属性设置为SystemColors.InactiveBorder
。
但是内部字段lineColor
是用SystemColors.ControlDark
初始化的。
这是不好的,因为Windows窗体设计器检测到该属性具有与DefaultValue
属性相同的值,因此它不会为InitializeComponent
的PropertyGrid.LineColor
属性编写设计器代码。 所以在运行时,属性被初始化为SystemColors.ControlDark
。
作为一个快速入门,你可以在InitializeComponent
之后设置属性:
InitializeComponent(); propertyGrid.LineColor = SystemColors.InactiveBorder;
在下一个.Net Framework版本的默认Windows主题中,我们正在将标题颜色还原为InactiveBorder,这很可能会包含在Windows 10 Fall Creators更新中。 引入这个改变的原因是前景和背景颜色在高对比度主题中没有足够的对比,这就是为什么我们只能在默认主题中恢复到以前使用的颜色。 内部工作项目编号(在.NET Framework 4.7.1的发行说明中也提到)是407249。
谢谢Tanya
这似乎是一个“功能”。 从.NET Framework 4.7发行说明 :
改变了属性网格线的背景色,为高对比度的主题提供了8:1的对比度。
所以,我会说,不,在Windows 10 Creators Update中,没有任何方法可以在没有重新编译的情况下恢复旧版本(请参阅此答案)。
我在这里抱怨。
更新
我这样精炼PropertyGrid
类:
sealed class LightPropertyGrid : PropertyGrid { static readonly Color DefaultLineColor = (Color) typeof(PropertyGrid) .GetProperty(nameof(LineColor)) .GetCustomAttribute<DefaultValueAttribute>() .Value; public LightPropertyGrid() { LineColor = DefaultLineColor; } }
我从同一属性中定义的默认值推断出LineColor
的初始值。 当然,您可以简单地分配LineColor = SystemColors.InactiveBorder
。