答案 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
基本上,您只能选择一种可用的颜色。 (或散发代码并享有自由!)
答案 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();
}