簡體   English   中英

如何將MetroFramework樣式顏色更改為所有控件

[英]How to change MetroFramework style color to all control

我在桌面應用程序中使用MetroFramework ,並將所有主題顏色廣告設置為默認值,同時更改父表單,我想更新所有子表單並將控件顏色設置為標准主題顏色。

檢查設計UI

http://thielj.github.io/MetroFramework

變更主題

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

通過該操作,主窗體顏色會更改,但控制窗體和子窗體樣式顏色不會更改。

嗨,蘇尼爾,

在MetroStyleManager中添加示例-1工具箱

添加StyleManager 設定設定

示例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);
    }

示例-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”方法中調用劣等方法。 例如Form1.cs

private void Form1_Load(object sender, EventArgs e)
{
    this.components.SetStyle(this);
}
metroStyleManager1.Theme = metroStyleManager1.Theme == MetroThemeStyle.Light ? MetroThemeStyle.Dark : MetroThemeStyle.Light;
this.Theme = metroStyleManager1.Theme;
this.Refresh();

我知道這是一個老問題,但是就像您在尋找解決方案一樣,它就像使用StyleManagerClone()方法一樣簡單,這會將樣式更改為窗體以及其中包含的所有MetroFrameWork控件

Form1 _form1 = new Form1();
this.StyleManager.Clone(_form1); //This will do everything for you

注意:必須將表單控件的UseStyleColors屬性啟用True才能起作用。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM