我刚刚将一些系统升级到Windows 10 Creators,并注意到windows forms PropertyGrid控件将标题和条形边距的默认视觉样式更改为深灰色,如下所示:

而且,由于大多数情况下发生了意想不到的视觉变化,用户不高兴。是否有一种方法可以恢复到旧的默认状态,或者可能重写默认样式?
发布于 2017-06-28 12:43:46
PropertyGrid中有一个bug:
属性PropertyGrid.LineColor的DefaultValue属性设置为SystemColors.InactiveBorder。
但是内部字段lineColor是用SystemColors.ControlDark初始化的。
这是不好的,因为Windows检测到该属性与DefaultValue属性具有相同的值,因此它不会在InitializeComponent中为PropertyGrid.LineColor属性编写设计器代码。因此,在运行时,属性被初始化为SystemColors.ControlDark。
作为快速攻击,您可以在InitializeComponent之后设置该属性
InitializeComponent();
propertyGrid.LineColor = SystemColors.InactiveBorder;发布于 2017-07-07 17:09:11
在下一个版本的InactiveBorder框架中,我们在默认窗口主题中将标题颜色恢复为.Net,这很可能将包含在windows 10秋季创建者更新中。之所以引入此更改,是因为前景和背景色在一个高对比度主题中没有足够的对比,这就是为什么我们只在默认主题中恢复到以前使用的颜色。供您参考,.Net框架4.7.1的发行说明中也将提到的内部工作项编号是407249。
谢谢你,坦尼娅
发布于 2017-07-03 12:26:58
这似乎是一个“特征”。来自.NET框架4.7发行说明
更改属性网格线的背景色,为高对比度主题提供8:1的对比度比。
因此,我要说的是,如果使用Windows10CreatorUpdate,就无法在不重新编译的情况下恢复旧的样式(请参阅这答案)。
我抱怨这里。
更新
我对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。
https://stackoverflow.com/questions/43609548
复制相似问题