不改变包含控件的不透明度的情况下更改表单的不透明度

4

在.NET中,使用Windows Forms,是否可以更改窗体的不透明度而不会自动更改窗体内控件的不透明度?

我有一个最大化运行的窗体,在窗体中央包含一个flowlayoutpanel,并带有其中的控件。我想降低窗体的不透明度,以使flowlayoutpanel周围的“备用”部分部分透明,但flowlayoutpanel本身保持实体(我瞄准lightbox风格效果)。


这在 Opacity 中是不可能的。如果你只想要0%,你可以使用 TransparencyKey 属性。 - Hans Passant
3个回答

2
当然,在WPF中可以通过将窗体的背景设置为透明来实现这一点(而不是将不透明度设置为0,这基本上会在前景和背景上都设置透明度)。
如果你真的想要的话,我认为你可以使用WindowsFormsHost将一个WinForms组件嵌入到一个透明的WPF窗体中。

1

Form.TransparencyKey 属性

当 TransparencyKey 属性被赋予一个颜色时,具有相同 BackColor 的窗体区域将会被透明显示。

如果 TransparencyKey 属性所赋予的颜色与窗体上的任何控件相同,则它们也将被透明显示。例如,如果您在一个将其 TransparencyKey 属性设置为 SystemColors.Control 的窗体上有一个 Button 控件,则该控件将被透明显示,除非将 Button 控件的 BackColor 属性更改为其他颜色。


0

很遗憾,OpacityForm的属性,而不是Control的属性。我能想象到唯一可能实现这个功能的方法是自定义绘制窗体并在用于绘制窗体背景的画笔中使用 alpha 组件。

即使如此,我认为它也不会起作用,因为桌面组合管理器(特别是在 Windows Vista 上)需要知道您的窗体应该如何与桌面的其余部分组合,而我认为画笔只会对窗体背景透明,而不是它下面的任何东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接