在Metro Framework中将样式颜色更改为自定义颜色?

时间:2017-06-21 09:33:38

标签: c# winforms metro-ui-css

我已在Windows窗体应用程序中实现了Metro Framework。我想将样式颜色更改为自定义颜色。 (如屏幕截图所示)我该怎么做? Sample page

7 个答案:

答案 0 :(得分:3)

我知道这是一个老问题,但它可能会帮助其他人在将来寻找答案。

如果在Visual Studio中使用nuget Metro Framework package进行C#,则需要将对象的“UseCustomBackColor”设置为true:

hjust

然后将设计器中的背面颜色更改为“自定义”并选择颜色,或者以编程方式设置它:

metroTile_YourTile.UseCustomBackColor = true;

对于包中的众多对象,包括按钮,下拉菜单等都是如此。我希望这对你有所帮助。

答案 1 :(得分:2)

我意识到这是一个老问题,但这让我发疯了,我无法在任何地方找到答案。但是,我确实搞清楚了,以为我愿意与他人分享...只要您不介意对源代码进行一点编辑,就有一种添加自定义颜色的方法。

1。从 MetroColors 课程开始。在底部,有一些与“自定义”选项有关的代码。将其替换为以下内容:

public static Color customColor = new Color();

public static Color Custom
{
    get
    {
        return customColor;
    }
}

2。接下来,进入 MetroPaint 课程。在底部附近,展开Helper Methods区域,然后为GetStyleColor添加一个自定义案例,

public static Color GetStyleColor(MetroColorStyle style)
{
    switch (style)
    {
        case MetroColorStyle.Custom:
            return MetroColors.Custom;
    }

GetStyleBrush

public static SolidBrush GetStyleBrush(MetroColorStyle style)
{
    switch (style)
    {
        case MetroColorStyle.Custom:
            return MetroBrushes.Custom;
    }

GetStylePen。 (确保最后保留默认值)

public static Pen GetStylePen(MetroColorStyle style)
{
    switch (style)
    {
        case MetroColorStyle.Custom:
            return MetroPens.Custom;
    }
}

3。确保 MetroPens

public static Pen Custom
{
    get
    {
        return GetSavePen("Custom", MetroColors.Yellow);
    }
}

MetroBrushes在它们的末尾都有“自定义”选项(我不记得它们是否已经存在)

public static SolidBrush Custom
{
    get
    {
        return GetSaveBrush("Custom", MetroColors.Custom);
    }
}

4。保存更改并进行构建,然后用新编辑的内容替换项目中的MetroFramwork.dll

5。我假设您已经有一个 comboBox 已加入 StyleManager。在comboBox项目的末尾添加“自定义”(只要您没有排除任何其他颜色,其索引应为15),然后向表单中添加一个colorDialog

6。将一个 SelectedIndexChanged事件处理程序添加到comboBox,然后添加以下内容:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox1.SelectedIndex == 15)
    {
        Color c = new Color();

        if (colorDialog1.ShowDialog() == DialogResult.OK)
        {
            c = colorDialog1.Color;
        }

        MetroColors.customColor = c;
        metroStyleManager1.Style = MetroColorStyle.Custom;
    }
    else
    {
        metroStyleManager1.Style = (MetroFramework.MetroColorStyle)Convert.ToInt32(comboBox1.SelectedIndex);
    }
    Refresh();
}

现在,当您从combBox中选择“自定义”时,将出现colorDialog,您可以选择任何颜色。如果您只想更改为不想更改的固定自定义颜色,则可以只指定RGB并将其应用于FormLoad上:

private void Form1_Load(object sender, EventArgs e)
{
    MetroColors.customColor = Color.FromArgb(0, 0, 0);
    metroStyleManager1.Style = MetroColorStyle.Custom;
}

您可以重复这些步骤多次,以添加新的颜色(Custom1,Custom2等)。只需记住也将它们添加到MetroColorStyle.cs的列表中即可。

答案 2 :(得分:1)

尝试使用:

this.Style={color};

答案 3 :(得分:0)

我不确定这是否有效,但尝试使用

this.BackColor = (your colour)

如果这是否有效,请告诉我。

答案 4 :(得分:0)

您可以使用:

this.Style = MetroFramework.MetroColorStyle.<color>;

可能的颜色:

  • 默认
  • 黑色
  • 白色
  • 蓝色
  • 绿色
  • 石灰
  • 蓝绿色
  • 橙色
  • 棕色
  • 粉红色
  • 洋红色
  • 紫色
  • 红色
  • 黄色

例如:

this.Style = MetroFramework.MetroColorStyle.Red;

您可以在任何MetroFramework控件上使用它:

metroProgressBar1.Style = MetroFramework.MetroColorStyle.Blue;

您还可以在明暗主题之间切换:

this.Theme = MetroFramework.MetroThemeStyle.Light;
//or
this.Theme = MetroFramework.MetroThemeStyle.Dark;

答案 5 :(得分:0)

简短答案:您不能。

一种解决方法是覆盖OnPaint的{​​{1}}方法并自己绘制。例如:

MetroForm

好答案:我正在使用Nuget的protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // custom draw the top border using (Brush b = new SolidBrush(Color.White)) { int borderWidth = 5; // MetroFramework source code e.Graphics.FillRectangle(b, 0, 0, Width, borderWidth); } } 。并想删除顶部边框。

阅读框架的源代码后,我发现了绘制顶部边框的方法,与上面的代码类似。

负责绘制颜色的方法是MetroModernUI,其中MetroPaint.GetStyleBrush(Style)是枚举Style。这是一个开关盒:

MetroColorStyle

基本上,您只能选择一种可用的颜色。 (或散发代码并享有自由!)

参考:MetroModernUI (Github)

答案 6 :(得分:0)

如前所述,自定义颜色是不可能的。但是,您可以使用已经定义的颜色。 (请参阅@SomeCoder的答案)

如果您想创建一个ComboBox来更改主题/样式,而不必对所有主题/样式都进行大的switch声明,则只需执行以下操作:

private void ColorComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    try
    {
        Enum.TryParse(colorComboBox.Text, out MetroColorStyle color);

        this.Style = color;
    }
    catch (ArgumentException)
    {
        this.Style = MetroColorStyle.Default;
    }

    Refresh();
}