【问题标题】:Creating an acrylic blur effect in WPF using Direct2D使用 Direct2D 在 WPF 中创建丙烯酸模糊效果
【发布时间】:2020-11-08 07:40:05
【问题描述】:

您好,我想创建 Microsoft 为我的 WPF 应用程序提供的丙烯酸模糊效果。 我尝试了很多方法,例如使用 DWM Blur Behind、DwmSetWindowAttribute 等。 但由于这些方法效果不佳,我想使用direct2d(UWP中使用win2d的方法)带来丙烯酸模糊效果这里提到的高斯模糊方法:

Gaussian blur effect - Win32 apps | Microsoft Docs

因为我是 DirectX 的新手,所以我需要帮助。

【问题讨论】:

  • 那么,您的具体问题是什么?
  • 你试过只使用 wpf 模糊效果吗?
  • 是的,但它只会为位图图像添加模糊,而不是为窗口添加模糊

标签: c# c++ wpf directx interop


【解决方案1】:

WPF 效果可以应用于任何 UI 元素。

https://docs.microsoft.com/en-us/dotnet/api/system.windows.uielement.effect?view=netcore-3.1

窗口是一个 uielement。注意继承链:

https://docs.microsoft.com/en-us/dotnet/api/system.windows.window?view=netcore-3.1

因此你可以这样做:

    Title="MainWindow" >
<Window.Effect>
    <BlurEffect KernelType="Gaussian" Radius="20" />
</Window.Effect>

该效果不适用于窗口镶边。

如果您希望窗口镶边模糊,那么您必须提供自己的自定义窗口镶边。

How to create custom window chrome in wpf?

如果您根本不需要窗口镶边,您可以将窗口样式设置为无。

【讨论】:

  • 我已经有一个使用 setWindowCompositionAttribute() 创建的透明窗口——当我应用模糊效果时,AccentState-Invalid 它只影响不透明的子元素。我需要的是使整个窗口模糊(比 DWM 模糊更多的模糊半径)
猜你喜欢
  • 2013-05-30
  • 2018-07-29
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2013-04-26
  • 1970-01-01
相关资源
最近更新 更多