我正在创建一个简单的表单(C#),并将其设置为transparencyKey
透明,BackColor
等于White
。但我在Labels
,GroupBoxes
和Buttons
中的文字仍然有一些白色背景(设置BackColor
等于Transparent
)。
结果如下:
我想让白色消失。看起来像这个片段in 5:07
答案 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设置为透明。