【发布时间】:2011-06-16 16:11:26
【问题描述】:
有什么方法可以使 WPF 窗口透明而不丢失非客户区(边框、标题栏、关闭/最小化/最大化按钮)?
将“AllowsTransparency”设置为“true”需要将“WindowStyle”设置为“None”(如this answer 中所述),这会删除非客户区。
一位 WPF 开发人员 blogged about how transparent windows work in WPF,以及为什么难以实现对非客户区透明度的支持。
无论您的窗口样式可能暗示什么,透明的 WPF 窗口都没有任何可见的非客户区。这适用于许多旨在创建自定义窗口形状的场景,但对于只想“淡入”普通窗口的人来说可能会很烦人。
那么,仅 WPF 的解决方案似乎是不可能的。
调用本机 SetLayeredWindowAttributes function 并传递 WPF 窗口的句柄和 LWA_ALPHA 没有效果,正如预期的那样。
我能想到的唯一其他方法是在 Win32(或可能是 WinForms)窗口中托管 WPF 内容。但是,我怀疑尝试这样做会导致airspace issues。
WPF 分层窗口在不同的操作系统上具有不同的功能... WPF 不支持透明度颜色键,因为 WPF 不能保证渲染您请求的确切颜色,尤其是在渲染是硬件加速时。
我不确定我是否正确阅读了上述内容,但听起来好像无法托管具有透明度的 WPF 内容。
有什么想法吗?
【问题讨论】:
标签: wpf transparency opacity