Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Blur the background of the WPF container

Ultimately, what I want to achieve is a replication to some extend, of an Aero glass functionality of a WPF content control.

If I apply the BlurEffect to a StackPanel that contains a TextBlock, I will have the TextBlock's text blurred.

Consider an examples:

No blur

no blur

and with <BlurEffect Radius="5" KernelType="Gaussian"/>

with blur

But is there a WPF way to blur the background behind the panel, and not it's contents?

The background of the StackPanel is a desktop, and the window that hosts it is set to AllowTransparency="True" to allow the custom-shaped look.

like image 478
Maxim V. Pavlov Avatar asked Oct 19 '11 00:10

Maxim V. Pavlov


2 Answers

no, it is not possible. The Effect is applied to the element and all its children but you can easily place the TextBlock outside the container, rather than inside it.

Normally you would use a grid like so:

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

In your example that will make no difference though. What, exactly, are you trying to blur?

like image 91
Patrick Klug Avatar answered Sep 20 '22 07:09

Patrick Klug


What the background of the StackPanel? an ImageBrush? If so why cant you apply BlurEffect to that?

If that is not possible then try this..

1] Use an image and draw it completely over Grid as I see you dont want a TileEffect. Add BlurEffect to this Image. Make sure you fill image the uniformly.

2] Then add StackPanel with transparent background as next child in the Grid i.e. dont reverse the order of image and stackpanel.

3] Then add TextBlock in StackPanel.

OR

If you insist on using a Brush to be set as the backgrounnd of the panel then use VisualBrush that draws a blurred image as background of the stackpanel, instead of ImageBrush.

Let me know if any of these tips help.

like image 37
WPF-it Avatar answered Sep 20 '22 07:09

WPF-it