В соответствии с множеством вопросов здесь, на SO, лучший способ сделать фон прозрачной формы - установить ее на довольно неиспользуемый цвет (например, Magenta), а затем установить форму TransparencyKey
на этот цвет.Прозрачный фон формы с MenuStrip?
this.BackColor = Color.Magenta;
this.TransparencyKey = Color.Magenta;
Эта часть работает хорошо. Проблема, с которой я сталкиваюсь, заключается в том, что она отлично работает , за исключением за MenuStrip. Полупрозрачный фон в 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 прозрачна, поэтому вы можете видеть под ней рабочий стол. Есть ли лучший способ сделать это или способ исправить это?
[Если вопросы включают «теги» в их названиях?] (Http://meta.stackexchange.com/q/19190/246945) – pravprab