最终,我想要实现的是在某种程度上复制WPF内容控件的Aero glass功能。
如果我将BlurEffect
应用于包含StackPanel
的{{1}},我的TextBlock
文字会模糊。
考虑一个例子:
没有模糊
和TextBlock
但有没有一种WPF方式来模糊面板背后的背景,而不是它的内容?
<BlurEffect Radius="5" KernelType="Gaussian"/>
的背景是桌面,托管它的窗口设置为StackPanel
以允许自定义形状的外观。
答案 0 :(得分:7)
通常你会使用这样的网格:
<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>