在.NET中,使用Windows Forms,是否可以更改窗体的不透明度而不会自动更改窗体内控件的不透明度?
我有一个最大化运行的窗体,在窗体中央包含一个flowlayoutpanel,并带有其中的控件。我想降低窗体的不透明度,以使flowlayoutpanel周围的“备用”部分部分透明,但flowlayoutpanel本身保持实体(我瞄准lightbox风格效果)。
在.NET中,使用Windows Forms,是否可以更改窗体的不透明度而不会自动更改窗体内控件的不透明度?
我有一个最大化运行的窗体,在窗体中央包含一个flowlayoutpanel,并带有其中的控件。我想降低窗体的不透明度,以使flowlayoutpanel周围的“备用”部分部分透明,但flowlayoutpanel本身保持实体(我瞄准lightbox风格效果)。
当 TransparencyKey 属性被赋予一个颜色时,具有相同 BackColor 的窗体区域将会被透明显示。
如果 TransparencyKey 属性所赋予的颜色与窗体上的任何控件相同,则它们也将被透明显示。例如,如果您在一个将其 TransparencyKey 属性设置为 SystemColors.Control 的窗体上有一个 Button 控件,则该控件将被透明显示,除非将 Button 控件的 BackColor 属性更改为其他颜色。
很遗憾,Opacity
是Form
的属性,而不是Control
的属性。我能想象到唯一可能实现这个功能的方法是自定义绘制窗体并在用于绘制窗体背景的画笔中使用 alpha 组件。
即使如此,我认为它也不会起作用,因为桌面组合管理器(特别是在 Windows Vista 上)需要知道您的窗体应该如何与桌面的其余部分组合,而我认为画笔只会对窗体背景透明,而不是它下面的任何东西。