有没有办法让WPF窗口透明而不会丢失非客户区域(边框,标题栏,关闭/最小化/最大化按钮)?
将'AllowTransparency'设置为'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内容。
有什么想法吗?
答案 0 :(得分:2)
Fluidkit有一个玻璃窗口的实现,我认为这就是你所追求的。
答案 1 :(得分:1)
您可以使用名为WPF Chrome的ms中的库自定义非客户区。查看此文章:'Custom Window Chrome'。
使用此库,您可以使铬透明并更改更多内容。
答案 2 :(得分:0)
实现此目标的唯一方法是使用setWindowCompositionAttribute()
方法并将其设置为无效状态。
只需看一下这段代码:https://github.com/riverar/sample-win32-acrylicblur
代替将合成属性设置为
ACCENT_ENABLE_ACRYLICBLURBEHIND
设置为
ACCENT_INVALID_STATE
这将使客户区完全透明。
注意:SetWindowCompositionAttribute()
是未公开的API的一部分。可以随时更改。