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