2

我正在编写一个大型 C# 应用程序。关键是控件的颜色应该可以由应用程序的用户进行调整。如果有任何解决方案可以覆盖(仅针对此应用程序的上下文)System.Drawing.SystemColors,那就太好了,这样我就不必手动设置每个控件的值。有人知道我的问题的解决方案就这么简单吗?谢谢

4

6 回答 6

1

我认为您最好的方法是继承每个控件并设置其默认显示属性。这将为您提供一个标准 WinForms 控件库,您可以轻松地自定义和重复使用这些控件。更多信息在这里(在 VB 中,我在 C# 中找不到示例)。

于 2009-04-30T12:20:42.417 回答
1

查看应用程序设置绑定。不确定如何对所有控件执行此操作,但只需通过控件树递归就足够了。

于 2009-04-30T12:09:53.143 回答
0

我写了下面的代码来做这样的事情。我对它不是特别满意,因为它需要对任何不寻常的控件进行专门处理,但它确实完成了工作。我保留了一个 Painter 实例,并在每次创建表单时调用 Apply,并将表单作为参数传递。它通过所有子控件递归,改变它们的外观

public class Painter
{
    Color foreColor;
    Color backColor;
    Color altBackColor;
    Color buttonColor;
    Font font;

    public Painter(Color foreColor, Color backColor, Color altBackColor, Color buttonColor, Font font)
    {
        this.foreColor=foreColor;
        this.backColor=backColor;
        this.altBackColor=altBackColor;
        this.buttonColor=buttonColor;
        this.font=font;
    }    

    public void Apply(Control c)
    {
        if(c==null)
            return;

        c.ForeColor = foreColor;

        c.BackColor = (c is Button ) ? buttonColor
                                     : backColor;

        if (c is DataGridView)
        {
            var dgv = (DataGridView) c;
            dgv.BackgroundColor = BackColor;
            dgv.AlternatingRowsDefaultCellStyle.BackColor = altBackColor;
            dgv.ColumnHeadersDefaultCellStyle.BackColor = buttonColor;
        }

        c.Font = font;

        foreach(Control child in c.Controls)
            Apply(child);
    }
}
于 2009-04-30T12:34:25.783 回答
0

您不需要覆盖系统默认值,但您可以定义自己的颜色。

Color NastyColour = Color.FromArgb(1, 2, 3);

1 = 红色 2 = 绿色 3 = 蓝色

于 2009-04-30T12:09:42.193 回答
0

不幸的是,不能仅为您的应用程序修改 Windows 配色方案。

Winforms 可以更改窗体上所有控件的背景颜色等内容,但对于许多区域(例如按钮上的斜角颜色或窗口标题栏),您可能需要自己绘制控件。

于 2009-04-30T12:12:10.797 回答
-1

花费 1000 美元即可获得一份 DevExpress。我们正在使用他们的框架编写一个大型应用程序,并且皮肤功能很棒。

我知道这听起来不是最好的答案,但如果您正在寻找应用程序范围的皮肤功能,第三方库可能是合适的。

于 2009-04-30T12:38:20.580 回答