模糊WPF容器的背景

时间:2011-10-19 00:24:30

标签: .net wpf effects blur

最终,我想要实现的是在某种程度上复制WPF内容控件的Aero glass功能。

如果我将BlurEffect应用于包含StackPanel的{​​{1}},我的TextBlock文字会模糊。

考虑一个例子:

没有模糊

no blur

TextBlock

with blur

但有没有一种WPF方式来模糊面板背后的背景,而不是它的内容?

<BlurEffect Radius="5" KernelType="Gaussian"/>的背景是桌面,托管它的窗口设置为StackPanel以允许自定义形状的外观。

4 个答案:

答案 0 :(得分:7)

不,这是不可能的。效果应用于元素和所有子元素,但您可以轻松地将TextBlock放在容器外,而不是放在容器内。

通常你会使用这样的网格:

<Grid>
  <Border>
     <Border.Effect>
      <BlurEffect Radius="5" KernelType="Gaussian"/>
     </Border.Effect/>
  </Border>
  <TextBlock .../>
</Grid>

在你的例子中,虽然没有区别。究竟,你想要模糊的是什么?

答案 1 :(得分:1)

StackPanel的背景是什么?一个ImageBrush?如果是这样,为什么你不能将BlurEffect应用于此?

如果无法做到,那就试试吧..

1]使用图片并在Grid上完全绘制,因为我看到你不想要TileEffect。将BlurEffect添加到此Image。确保均匀填充图像。

2]然后在StackPanel中添加Grid透明背景作为下一个孩子,即不要颠倒图片和堆叠面板的顺序。

3]然后在StackPanel中添加TextBlock

OR

如果您坚持使用Brush作为面板的背景,请使用VisualBrush绘制模糊图像作为stackpanel的背景,而不是ImageBrush。< / p>

如果这些提示有任何帮助,请与我们联系。

答案 2 :(得分:1)

您可以在Systems.Window上使用 SetWindowCompositionAttribute ,但是您必须将WindowStyle设置为&#34; None&#34;并实现您自己的原生Window功能和句柄。继承自定义控件也非常复杂。长话短说,有BlurryControls。

您可以通过浏览&#34; BlurryControls&#34; NuGet 找到它。或者在 GitHub 上查看代码。无论如何,我希望这是有帮助的。它使用.NET 4.5.2并且仅适用于Windows10,因为在Windows8上没有解决此问题的方法,而在早期版本(Windows7和Vista)中,您可以通过访问 DwmEnableBlurBehindWindow 来实现此目的。

在GitHub上,您还会找到一个名为BlurryWindowInvoker的示例应用程序。

答案 3 :(得分:0)

您可以将其应用于网格。

<Grid.Background>
   <VisualBrush>
       <VisualBrush.Visual>
          <Image Source="RESOURCES/BACKGROUNDS/BACKGROUND_01.jpg">
             <Image.BitmapEffect>
                <BlurBitmapEffect KernelType="Gaussian" Radius="20" />
             </Image.BitmapEffect>
          </Image>
       </VisualBrush.Visual>
    </VisualBrush>
 </Grid.Background>
相关问题