2009-04-30 3 views
2

im on написать большое приложение C#. Дело в том, что цвета элементов управления должны регулироваться пользователем приложения. Было бы очень приятно, если бы было какое-либо решение переопределить (только для контекста этого приложения) System.Drawing.SystemColors, так что мне не нужно устанавливать значение каждого отдельного элемента управления вручную. Неужели кто-нибудь знает решение моей проблемы, которое так просто? ThanksC# Применение широкого управления цветом

+0

Я предполагаю, что это Winforms, а не WPF, поскольку вы упомянули System.Drawing.SystemColors –

ответ

0

Вам не нужно переопределять системные значения по умолчанию, но вы можете определить свои собственные цвета.

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

1 = Красный 2 = Зеленый 3 = Синий

1

Посмотрите приложений Настройка привязок. Не уверен, как вы это сделаете для всех элементов управления, но достаточно просто выполнить рекурсию через дерево управления.

0

К сожалению, изменить цветовую схему Windows невозможно только для вашего приложения.

Winforms позволяет изменять такие вещи, как цвет фона для всех элементов управления на форме, но для многих областей (например, цветов скоса на кнопках или оконных заголовков) вам, вероятно, придется прибегнуть к рисованию контролировать себя.

1

Я думаю, что ваш лучший подход был бы наследовать каждый элемент управления и устанавливать его свойства отображения по умолчанию. Это даст вам библиотеку стандартных элементов управления WinForms, которые вы можете легко настроить и повторно использовать. Дополнительная информация here (в VB я не нашел примеров на C#).

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); 
    } 
} 
-1

потратить $ 1000 и получить копию DevExpress. Мы пишем большое приложение, используя их фреймворк, и способность скининга великолепна.

Я знаю, что это не похоже на лучший ответ, но если вы ищете широкую скинируемость приложения, может потребоваться сторонняя библиотека.

Смежные вопросы