【发布时间】:2013-05-23 06:36:20
【问题描述】:
根据关于 SO 的很多问题,使表单背景透明的最佳方法是将其设置为相当未使用的颜色(如洋红色),然后将表单的 TransparencyKey 设置为该颜色。
this.BackColor = Color.Magenta;
this.TransparencyKey = Color.Magenta;
那部分工作正常。我遇到的问题是它在 MenuStrip 后面工作正常except。 MenuStrip 中的半透明背景 + 表单中的透明背景最终如下:
这就是 MenuStrip 的样子。它变成洋红色的部分是 MenuStrip 本身设置为半透明时。
这是我的表单初始化函数的样子:
public frmMain() {
this.TransparencyKey = Color.Magenta;
InitializeComponent();
this.BackColor = Color.Magenta;
if(Properties.Settings.Default.windowTheme == 0) { // theme is light
menuStrip.Renderer = new ToolStripProfessionalRenderer(new LightTheme());
}
else if(Properties.Settings.Default.windowTheme == 1) {
menuStrip.Renderer = new ToolStripProfessionalRenderer(new DarkTheme());
}
menuStrip.Invalidate();
}
还有我的 MenuStrip 自定义渲染器(颜色现在仅用于测试):
public class LightTheme: ProfessionalColorTable {
public override Color MenuItemSelected {
get { return Color.FromArgb(255, Color.Yellow); }
}
public override Color MenuStripGradientBegin {
get { return Color.FromArgb(255, Color.Black); }
}
public override Color MenuStripGradientEnd {
get { return Color.FromArgb(0, Color.Gainsboro); }
}
}
我在这里真正想要完成的是让表单透明并且 MenuStrip 的一部分透明,这样您就可以看到它下面的桌面。有没有更好的方法或解决此问题的方法?
【问题讨论】:
标签: c# transparency menustrip