2016-01-20 12 views
1

Я использую в своем настольном приложении MetroFramework и задаю все цветные объявления по умолчанию при внесении изменений в родительскую форму. Я хочу обновить всю дочернюю форму и управлять цветом в качестве цвета тем оформления ,Как изменить стиль стиля MetroFramework для всех элементов управления

Проверить дизайн пользовательского интерфейса

http://thielj.github.io/MetroFramework

Изменение темы

var m = new Random(); 
int next = m.Next(0, 13); 
this.Style = (MetroColorStyle)next; 

С действием основной формой цвет меняется но и ребенка контроллер цвет формы стиль не меняется.

+0

Если вы хотите элегантный взгляд Metro; стилизация и окраска; вам, возможно, лучше использовать _WPF_ и _MahApps Metro_. Гораздо проще, чем WinForms. [Этот проект Github] (https://github.com/thielj/MetroFramework/graphs/contributors), о котором вы упомянули, выглядит довольно мертвым слишком грустно. Нет активности с середины 2013 года – MickyD

+0

@ Микки это оригинальная копия MetroFramework, а не WCF. –

+0

MetroFramework довольно надежный, я не вижу проблемы с использованием библиотеки 2 с половиной годами устаревания, если она надежна! –

ответ

2

Hhi Сунил,

Exmple -1 Набор инструментов в MetroStyleManager добавить

Set Setting

Пример 2 (метод расширения)

public static void SetDefaultStyle(this IContainer contr, MetroForm owner, MetroColorStyle style) 
    { 
     MetroStyleManager manager = FindManager(contr, owner); 
     manager.Style = style; 
    } 
    public static void SetDefaultTheme(this IContainer contr, MetroForm owner, MetroThemeStyle thme) 
    { 
     MetroStyleManager manager = FindManager(contr, owner); 
     manager.Theme = thme; 
    } 
    private static MetroStyleManager FindManager(IContainer contr, MetroForm owner) 
    { 
     MetroStyleManager manager = new MetroStyleManager(contr); 
     foreach (IComponent item in contr.Components) 
     { 
      if (((MetroStyleManager)item).Owner == owner) 
      { 
       manager = (MetroStyleManager)item; 
      } 
     } 
     return manager; 
    } 

Использование:

public frmMain() 
    { 
     InitializeComponent();    
     this.components.SetDefaultStyle(this, MetroColorStyle.Purple); 
    } 

Exemple - 3: Если вы хотите установить тему для всех форм.

Шаг 1: Создайте новый класс «MyExtensions.cs». Это содержание:

public static class MyExtensions 
{ 
    //What is your style 
    private const MetroColorStyle FormStyle = MetroColorStyle.Green; 
    public static void SetStyle(this IContainer container, MetroForm ownerForm) 
    { 
     if (container == null) 
     { 
      container = new System.ComponentModel.Container(); 
     } 
     var manager = new MetroFramework.Components.MetroStyleManager(container); 
     manager.Owner = ownerForm; 
     container.SetDefaultStyle(ownerForm, FormStyle); 


    } 
    public static void SetDefaultStyle(this IContainer contr, MetroForm owner, MetroColorStyle style) 
    { 
     MetroStyleManager manager = FindManager(contr, owner); 
     manager.Style = style; 
     owner.Style = style; 
    } 
    public static void SetDefaultTheme(this IContainer contr, MetroForm owner, MetroThemeStyle thme) 
    { 
     MetroStyleManager manager = FindManager(contr, owner); 
     manager.Theme = thme; 
    } 
    private static MetroStyleManager FindManager(IContainer contr, MetroForm owner) 
    { 
     MetroStyleManager manager = null; 
     foreach (IComponent item in contr.Components) 
     { 
      if (((MetroStyleManager)item).Owner == owner) 
      { 
       manager = (MetroStyleManager)item; 
      } 
     } 
     return manager; 
    } 
} 

Шаг 2: Во всех ваших формах вам нужно будет вызвать метод уступает в методе «Load». Excemple Form1.cs для

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.components.SetStyle(this); 
} 
+0

Вы сделали какой-либо проект в MetroFramework? –

+0

Да, я сделал проект. @SunilAcharya [Project SS] (http://imgur.com/a/q5g5X) –

+0

Но как я могу применить выбранный стиль и тему ко всем моим открытым формам? – Pratikk

0
metroStyleManager1.Theme = metroStyleManager1.Theme == MetroThemeStyle.Light ? MetroThemeStyle.Dark : MetroThemeStyle.Light; 
this.Theme = metroStyleManager1.Theme; 
this.Refresh();