16

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

Factor Mystic
  • 26,279
  • 16
  • 79
  • 95
Artur Carvalho
  • 6,901
  • 10
  • 76
  • 105

3 Answers3

19

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.

Community
  • 1
  • 1
Rhys
  • 4,511
  • 2
  • 23
  • 32
  • I can almost do it with Visual Brush. Do you think its possible to do something like the mockup image? Or is this what you were referring when you said "as long ... the placement of the glass effect border is controlled tightly"? Thanks! – Artur Carvalho Jan 08 '09 at 01:10
  • Found it! Needed AlignmentX="Left" AlignmentY="Top" Stretch="None". – Artur Carvalho Jan 08 '09 at 01:38
  • 6
    Nice example, but I wouldn't recommend using BitmapEffect for performance reasons. Even if it looks fine now, it might bite you further down the line. You can change that bit to – Steven Robbins Jan 08 '09 at 06:36
3

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.

Steven Robbins
  • 26,441
  • 7
  • 76
  • 90
0

Use Vista glass.

Eclipse
  • 44,851
  • 20
  • 112
  • 171