【问题标题】:How to change MetroFramework style color to all control如何将 MetroFramework 样式颜色更改为所有控件
【发布时间】:2016-04-26 08:56:52
【问题描述】:

我在我的桌面应用程序中使用MetroFramework 并将所有主题颜色广告设置为默认值,同时在父表单中进行更改我想将所有子表单和控件颜色更新为标准主题颜色。

检查设计 UI

http://thielj.github.io/MetroFramework

更改主题

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

随着动作,主表单颜色发生变化,但控制器和子表单样式颜色没有变化。

【问题讨论】:

  • 如果你想要漂亮的 Metro 外观;造型和着色;使用 WPFMahApps Metro 可能会更好。比 WinForms 容易得多。 That Github project 你提到的,看起来死的太可悲了。自 2013 年年中以来没有任何活动
  • @Micky 它最初是 MetroFramework 的副本,而不是 WCF。
  • MetroFramework 相当健壮,如果它健壮的话,我认为使用过期 2 年半的库没有问题!
  • @ZachRoss-Clyne 你好,感谢你的回复,因为你正在使用这个框架,所以我想从你那里学到很多想法,不介意主题选项和动画。目前,我想从 MDI 页面或子表单更改主题样式,但通过操作,只有当前表单正在更改主题。我的问题是如何根据 MDI 或任何其他形式更改整个应用程序和控件主题。
  • @ZachRoss-Clyne 如果你不是我的,我可以给你任何联系方式,比如推特或电子邮件

标签: c# winforms frameworks microsoft-metro modern-ui


【解决方案1】:

你好苏尼尔,

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

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

【讨论】:

  • 是的,我做了这个项目。 @SunilAcharya Project SS
  • 但是如何将选定的样式和主题应用于所有打开的表单?
  • 嗨@Pratikk您必须创建一个名为“MyBaseWinForm”的表单,并且所有表单都必须从中继承。将MetroStyleManager动态添加到MyBaseWinForm的构造方法中,您可以将代码放在“示例2"' 在这个类中。这样你就可以通过继承来修复它。
  • 我收到一个错误“扩展方法必须在非泛型静态类中定义”。你能给我一个例子,这样我就可以在我的项目中检查和实施它
  • @Pratikk 使用扩展方法的类必须是独立的和静态的。我为您添加了“示例 3”
【解决方案2】:

我知道这是一个老问题,但就像您正在寻找解决方案一样,它就像使用 StyleManagerClone() 方法一样简单,这会将样式更改为表单和所有 MetroFrameWork其中包含的控件

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

注意:表单控件的UseStyleColors 属性必须启用True,才能工作。

【讨论】:

    【解决方案3】:
    metroStyleManager1.Theme = metroStyleManager1.Theme == MetroThemeStyle.Light ? MetroThemeStyle.Dark : MetroThemeStyle.Light;
    this.Theme = metroStyleManager1.Theme;
    this.Refresh();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 2021-08-06
      相关资源
      最近更新 更多