我对某些控件的不透明性有疑问。
因此,在加载表单时,我将表单的不透明度设置为0.3,问题是它使其他控件与表单一样透明。这是代码。
private void Form1_Load(object sender, EventArgs e)
{
this.Opacity = 0.3;
}
这样做,我所有的控件都和表单一样透明。有什么办法可以使表单内的控件具有不同的不透明度?我根本不希望对方透明。
答案 0 :(得分:1)
我的第一个建议就是避免这种情况。具有不透明控件的半透明背景看起来有些奇怪。相反,可以考虑将窗体处于活动状态时将不透明度从0.3更改为0.7,以便于阅读。
另一个问题是,如果某些控件是不透明的并且背景几乎是透明的,则您的UI在某些背景上可能无法正常工作。例如,如果背景真的很暗,那么很难看到深色文字(控件)。如果背景为白色,则诸如编辑框之类的白色控件将与背景具有相同的颜色。
您可以从其他人的评论中获得一些想法。即使对WPF有一些评论,您也可以对WinForms有所了解。而且,如果您没有获得预期的结果,则也可以考虑在用户界面的那部分使用WPF。
话虽如此,一种可能的解决方法是,在同一位置创建两个顶层窗口(并根据需要移动/调整它们的大小)。这样,您可以拥有一个带有透明键和不透明区域所需背景的窗口,该背景将用于不透明和半透明区域。另一个窗口将使用不透明性,因此它将是半透明的。这是一个窗口,其中将包含您的UI控件(以及顶部的控件)。
过去,我曾使用该技术在一个应用程序中拥有一个半透明的客户区域,该区域具有完全不透明的框架,我希望能够透视客户区域(可调整的不透明度),以便我可以“绘制”我的窗口使用另一个应用程序中的图像作为参考。
另一条评论是,您可能需要使用Windows句柄进行实际控制,并需要直接Win32 API访问权限以进行WinForms和/或WPF中不可用的某些自定义。在我的应用程序中,我以某种方式处理激活,如果单击底层窗口,则顶层窗口仍显示为活动窗口(标题栏颜色)。如果没有标准标题栏(框架是自定义框架,或者根本没有框架),那么您就不会有问题。
如注释部分中某些链接所建议,也可以使用单个顶级窗口获得所需的内容。我没有尝试过。实际上,当我尝试上述解决方案时,我认为Windows XP仍支持我的应用程序,因此,您在选项上受到更多限制,并且行为有所不同,本质上是因为XP或多或少直接在Vista和更高版本中写入屏幕为每个窗口使用位图(缓冲区)。
我还对初始屏幕(在单个窗口上)使用了组合的透明键和不透明性,并且它在大多数系统上都可以使用,但是有时我在某些系统(可能是某些具有特定配置的XP机器)上出现黑色背景,而不是所需的背景。