首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows 10创建者更新更改PropertyGrid控件的样式

Windows 10创建者更新更改PropertyGrid控件的样式
EN

Stack Overflow用户
提问于 2017-04-25 11:34:21
回答 3查看 967关注 0票数 7

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

而且,由于大多数情况下发生了意想不到的视觉变化,用户不高兴。是否有一种方法可以恢复到旧的默认状态,或者可能重写默认样式?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-28 12:43:46

PropertyGrid中有一个bug:

属性PropertyGrid.LineColorDefaultValue属性设置为SystemColors.InactiveBorder

但是内部字段lineColor是用SystemColors.ControlDark初始化的。

这是不好的,因为Windows检测到该属性与DefaultValue属性具有相同的值,因此它不会在InitializeComponent中为PropertyGrid.LineColor属性编写设计器代码。因此,在运行时,属性被初始化为SystemColors.ControlDark

作为快速攻击,您可以在InitializeComponent之后设置该属性

代码语言:javascript
复制
InitializeComponent();
propertyGrid.LineColor = SystemColors.InactiveBorder;
票数 8
EN

Stack Overflow用户

发布于 2017-07-07 17:09:11

在下一个版本的InactiveBorder框架中,我们在默认窗口主题中将标题颜色恢复为.Net,这很可能将包含在windows 10秋季创建者更新中。之所以引入此更改,是因为前景和背景色在一个高对比度主题中没有足够的对比,这就是为什么我们只在默认主题中恢复到以前使用的颜色。供您参考,.Net框架4.7.1的发行说明中也将提到的内部工作项编号是407249。

谢谢你,坦尼娅

票数 3
EN

Stack Overflow用户

发布于 2017-07-03 12:26:58

这似乎是一个“特征”。来自.NET框架4.7发行说明

更改属性网格线的背景色,为高对比度主题提供8:1的对比度比。

因此,我要说的是,如果使用Windows10CreatorUpdate,就无法在不重新编译的情况下恢复旧的样式(请参阅答案)。

我抱怨这里

更新

我对PropertyGrid类进行了如下改进:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43609548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档