C#应用广泛的色彩管理

时间:2009-04-30 12:03:14

标签: c# colors themes

即时编写一个大型C#应用程序。 关键是控件的颜色应该由应用程序的用户调整。 如果有任何解决方案要覆盖(仅适用于此应用程序的上下文)System.Drawing.SystemColors,那将是非常好的,这样我就不必手动设置每个控件的值。 有人知道我的问题的解决方案,这很简单吗? 感谢

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分: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);
    }
}

答案 5 :(得分:-1)

支出1000美元并获得DevExpress的副本。我们正在使用他们的框架编写一个大型应用程序,并且剥皮能力很强。

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