如何在原始Winforms控件上实现透明的背色?
-
30-09-2019 - |
题
我将在这里失去理智。
为什么复选框控件不将其背后的内容融合在一起?
该问题适用于所有Winforms控件,但我以此为例。
一张图片胜过千言万语:
还有一些单词:
背后是什么 CheckBox
是彩色的 PictureBox
es和a Button
.
这 CheckBox
' BackColor
设定为 Transparent
. 。但是以某种方式决定这意味着它应该分享 BackColor
包含 Form
(这是透明度幻想的想法吗?)。
这在Winforms中不可能吗?我可以发誓我以前这样做了。
更新:
我只是尝试了:
在该表单上,设置 CheckBox
' BackColor
到 Transparent
, ,然后更改 BackColor
包含 Form
还有其他颜色, CheckBox
会匹配的 BackColor
. 。什么.......?
解决方案
鲍勃·鲍威尔(Bob Powell)写了 优秀的 有关透明控制的文章。看看这个:
其他提示
这是控件是Windows Windows的副作用。一个窗口负责绘制自身,OnPaintbackground和OnPaint方法来处理这一点。
这种渲染模型不能很好地支持透明度。通过使用分层窗口来支持真正的透明度。这是由视频适配器实现的,Windows使用了IT硬件覆盖功能。但这仅适用于高级窗户,而不是儿童窗户。注意表单。
通过技巧有部分支持透明度。控件可以通过要求父窗口首先在控制窗口内绘制自身来伪造它。产生背景像素,然后可以在其中绘制。将背色属性设置为color.Transparent可以为支持此功能的控件提供此技巧。所有的按钮式派生类都可以。但是,不是对本机Windows控件的包装器的控件。
“问父窗口”是此技巧中的缺陷在您的屏幕截图中可见的位置。您正在看到形式像素。堆叠效果不起作用,它从不考虑Z订单中的任何中间窗口,而只能是父级。这是可以解决的,但是 非常 丑陋,有一篇KB文章显示代码。
同样值得注意的是,WPF没有这种限制。控件不是窗户,它们是通过在父母顶部绘画来渲染的。油漆层。透明度现在是微不足道的,只是不要绘画。
您可以手动将复选框的后色设置为所需的颜色吗? (其背后的图片框中的值)
“透明”可能意味着与您想要的MS不同。
另外,尝试更改图片框的Zorder(将其放在前面),看看是否更改了复选框的基础颜色。