我正在尝试创建一个WPF应用程序,它带有一个半透明的无边框窗口,使其后面的背景变得模糊。
下面是我想做的一个例子:
我试过使用**DwmEnableBlurBehindWindow**,它只适用于Windows Vista/7。
我正试图找到一个解决方案,将工作在Windows 7,8和10。
我正在尝试创建一个WPF应用程序,它带有一个半透明的无边框窗口,使其后面的背景变得模糊。
下面是我想做的一个例子:
我试过使用**DwmEnableBlurBehindWindow**,它只适用于Windows Vista/7。
我正试图找到一个解决方案,将工作在Windows 7,8和10。
4条答案
按热度按时间p8h8hvxi1#
对于任何感兴趣的人,我已经找到了一个解决方案的Windows 10。它看起来好像是不可能的Windows 8虽然;正如大卫Heffernan提到的,Windows 8中删除了
DwmEnableBlurBehindWindow
。但是,微软在Windows 10中重新引入了一个解决方案来实现这一效果。DwmEnableBlurBehindWindow
q35jwt9p2#
我希望我没有迟到。你可以使用SetWindowCompositionAttribute,但是你必须将WindowStyle设置为“None”,并且实现你自己的本地窗口函数和句柄。另外,从自定义控件继承是相当复杂的。但是,长话短说,还有BlurryControls。
你可以通过NuGet浏览“BlurryControls”找到它,或者自己在**GitHub**上查看代码。无论如何,我希望这对你有帮助。
在GitHub上,您还可以找到一个示例应用程序。
mzsu5hc03#
** windows 8**
就像一个死胡同,最好是完全忘记,我们可能需要确保我们的程序在不同版本之间的行为一致。如果不需要动态背景,特别是如果窗口相对较小(主要候选者是我们自己的应用程序窗口上的消息框或类似物),捕获窗口后面的屏幕并手动使其模糊的解决方案可能有效。在
Loaded
事件处理程序中:其中
border
是最外面的Border
,通常完全为空,仅在Windows 8上使用。helper函数是通常的位图转换:
ApplyGaussianBlur()
最好使用WriteableBitmapEx
之类的直接位图操作包以及必要的modifications.来解决mkh04yzy4#
微软从Windows 8开始移除了玻璃效果。这就解释了为什么你所期待的模糊效果在Windows 8和更高版本上没有观察到。你必须学会在那些操作系统上没有它的生活。