透明背景的标签

时间:2015-12-31 03:37:25

标签: c# winforms transparency

我正在创建一个简单的表单(C#),并将其设置为transparencyKey透明,BackColor等于White。但我在LabelsGroupBoxesButtons中的文字仍然有一些白色背景(设置BackColor等于Transparent)。

结果如下:

我想让白色消失。看起来像这个片段in 5:07

2 个答案:

答案 0 :(得分:1)

如果你想要抗锯齿,你将无法通过TransparencyKey获得它,几乎就是定义。 TransparencyKey选择单个颜色,该颜色的任何像素都变得完全透明。抗锯齿使用各种色调来模拟平滑边缘;那些色调与您透明的单色不匹配,因此这些像素将是不透明的,这正是我们在屏幕截图中看到的。

您需要使用Windows所指的“分层窗口”。有两种分层窗口;有哪种使用TransparencyKey(WinForms支持,但不适合您的需求),以及允许您为窗口的每个像素指定透明度值的类型(看起来WinForms不支持开箱即用) )。

我的建议是使用WPF而不是WinForms。 WinForms是一项古老的技术,并且真的不适合你在这里尝试创建的那种UI效果。它甚至不能很好地支持表单中的半透明控件,更不用说基于其内容的表单本身的每像素alpha。

WPF 可以开启每个像素的透明度。将您的窗口WindowStyle设置为None,将AllowsTransparency设置为true,然后您可以使用所需的所有透明效果。将窗口的背景颜色设置为Transparent(如果您希望空白区域的点击仍然转到您的窗口)或{x:None}(如果您希望点击空白区域,请转到您的窗口下方)或半透明刷;层半透明控制或ARGB位图相互叠加;它看起来都很棒。

如果你真的想出于某种原因使用WinForms,我猜你会有一个很多的工作。我建议谷歌搜索“WinForms分层窗口”并刷新你的P / Invoke。

答案 1 :(得分:-1)

您应该将BackColor设置为透明。