c# - 标题栏不可点击 Form.TransparencyKey = White

标签 c# windows winforms

如果我使用 WinForm 模板创建 C# (.NET 3.5) 应用程序并将 Form.TransparencyKey 属性设置为白色,则标题栏和关闭、最小化、最大化按钮在运行该应用程序时不起作用,单击它们会导致窗口失去焦点,就像在窗口外单击一样。当鼠标悬停在关闭等上时没有动画。
这一直持续到窗口被最小化(窗口上的按钮不起作用所以必须使用 winkey+m 或通过任务栏完成)然后恢复。在此之后,窗口似乎表现正常。

这种行为背后的机制是什么?

环境:Windows Vista (Aero) 和 VS2008。

最佳答案

与 TransparencyKey 颜色匹配的窗口的任何部分对用户的眼睛都是透明的。对于鼠标,如果您单击窗口的透明部分,您将单击您窗口下方的任何窗口。

这使得使用 Color.White 成为颜色键的一个相当糟糕的选择,用户的主题颜色很可能也会使部分标题栏变成白色。就像关闭按钮中的 X。

非常重要的一点是,您选择的颜色不会出现在窗口的其他任何地方,这样您就不会意外获得透明效果。这种颜色的标准选择是 Color.Fuchsia。漂亮的乱七八糟的颜色通常会在用户的视网膜上留下针孔,没有人会自愿在他们的 UI 设计中使用。


还有一个令人难以忍受的细节:这种通过使用分层窗口创建的透明度在启用 Aero 的现代 Windows 版本上以不同方式实现。对于 Aero,它不再由视频适配器实现,而是由 DWM 在软件中实现。其中有一个错误,它不能正确处理某些 种颜色键值的鼠标透明度。这个错误没有很好地描述,但我知道它不适用于 Color.Red 例如。所以选择正确的主色很重要。除非您想利用这个错误,否则一些程序员仍然希望窗口的透明部分有鼠标事件。有风险,但该错误已经存在多年,因此可能不会再得到修复。

关于c# - 标题栏不可点击 Form.TransparencyKey = White,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25471899/

相关文章:

c# - 使用 xaml 在数据网格中选择行后更改 DataGridTemplateColumn 中的复选框状态

c# - 创建松散耦合/可扩展的软件架构

c# - 如何获取动态添加到 Windows 窗体 C# 中的控件的值?

.net - Arial Unicode MS是WinForms UI的正确字体吗?

c# - ExtJS 无法解码 JSON 消息

c# - MassTransit 消费者测试已通过,但引发了令人困惑的错误

mysql - 如何将文件从C盘复制到网络文件夹?

.net - 如何确保我的程序始终可以运行,并且如果计算机重新启动或进程终止,它可以自动重新启动?

windows - Vagrant 错误 : Unable to Mount VirtualBox Shared Folders (Guest Additions, vboxsf)

c# - 隐藏面板应该强制下面的控件向上移动并调整表单大小