Visual Studio 2012 Metro UI VB WinForm如何修改按钮背景色?
解决Metro UI按钮背景色无法修改的问题
嘿,我刚好碰到过类似的问题!在VS2012里开发Metro风格应用的时候,这类控件的样式定制确实不能用传统WinForms那套思路,原因是Metro设计语言本身强调统一的视觉规范,所以很多原生或第三方Metro控件都把传统的BackColor这类属性给封装或者隐藏了。给你几个可行的解决方案,分情况来看:
情况1:你用的是原生Windows Store App(Metro)的XAML控件
如果是开发面向Windows 8/8.1的Metro风格应用(也就是当时的Windows Store App),WinForms的BackColor属性完全不适用,因为这是XAML控件体系,得用它的专属属性:
- 代码方式修改:用
Background属性配合SolidColorBrush来设置背景色:
btn_save.Background = new SolidColorBrush(Windows.UI.Colors.Red);
- XAML方式修改:直接在控件定义里设置背景,这种方式更直观,也方便后续维护:
<Button x:Name="btn_save" Content="保存"> <Button.Background> <SolidColorBrush Color="Red"/> </Button.Background> </Button>
情况2:你用的是第三方Metro风格WinForms控件(比如ModernUI这类)
如果是在WinForms项目里用了第三方的Metro风格控件包,这类控件通常会提供自定义样式的专属属性,而不是直接开放BackColor:
- 先检查控件的属性窗口,看看有没有类似
UseCustomBackColor、CustomBackgroundColor这类开关和属性,开启开关后再设置自定义颜色:
btn_save.UseCustomBackColor = true; btn_save.CustomBackgroundColor = Color.Red;
- 如果找不到这类属性,或者设置后还是无效,可以通过重写Paint事件来自绘背景:
private void btn_save_Paint(object sender, PaintEventArgs e) { Button metroBtn = sender as Button; if (metroBtn == null) return; // 绘制自定义背景 using (SolidBrush bgBrush = new SolidBrush(Color.Red)) { e.Graphics.FillRectangle(bgBrush, metroBtn.ClientRectangle); } // 重新绘制按钮文字,避免被背景覆盖 TextRenderer.DrawText( e.Graphics, metroBtn.Text, metroBtn.Font, metroBtn.ClientRectangle, metroBtn.ForeColor, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter ); }
为什么原来的代码无效?
Metro风格控件为了严格遵循设计语言的视觉规范,大多会屏蔽传统WinForms控件的BackColor、ForeColor这类属性,改用更统一的样式系统(比如XAML的资源字典、第三方控件的自定义样式类),所以直接调用btn_save.BackColor = Color.Red自然不会生效啦。
内容的提问来源于stack exchange,提问作者Umesh
相关产品推荐
相关产品推荐

