15
votes

I need to create a transparent blurred background. Lets suppose I have a border with a white blurry transparent background. Everything that is behind the border is blurred.

I'm trying to avoid dependencies; I'm currently using .NET 3.0, and want it to run with XP too.

Mockup image:

Mockup Image

3

3 Answers

18
votes

A VisualBrush can be used to get close to what you want, but has some limitations.

As long as you only need the glass effect within the window (and not be an effect over other windows) and that the placement of the glass effect border is controlled tightly then you could you something like this:-

  <Grid>
    <Border x:Name="src" Background="Silver">
      <Label HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50">Hello World</Label>
    </Border>
    <Border Background="White" Margin="40" >
      <Border Opacity="0.5" >
          <Border.Effect>
            <BlurEffect Radius="10"/>
          </Border.Effect>
        <Border.Background>
          <VisualBrush  Visual="{Binding ElementName=src}" Stretch="None" />
        </Border.Background>
      </Border>
    </Border>
  </Grid>

I don't think that a child element within the visual tree is able to get the VisualBrush of it's parent so this might be a limitation for you. (i.e. the glass panel cannot be contained by the background panel)

I've used VisualBrushes many times usually with TranslateTransforms to move them around a bit to get the right image in the right place.

Update:

Altered XAML to use Effect and not BitmapEffect that is slower and now depreciated as mentioned in the comments below by Steven Robbins.

3
votes

I would imagine you will need use an Effect for this, applied to a background rectangle or grid.

There's a decent library of effects here if that floats your boat.