Я написал код ниже, чтобы сделать что-то вроде этого. Я не особенно доволен этим, так как он нуждается в специальной обработке для любых элементов управления, которые являются необычными, но он сделал свою работу. Я держу экземпляр 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);
}
}