模糊的不透明度

Art*_*lho 14 wpf .net-3.0

我需要创建一个透明的模糊背景.让我们假设我有一个白色模糊透明背景的边框.边界后面的一切都很模糊.

我试图避免依赖; 我目前正在使用.NET 3.0,并希望它也可以在XP上运行.

样机图片:

样机图像

Rhy*_*hys 16

VisualBrush可用于接近您想要的,但有一些限制.

只要您只需要窗口内的玻璃效果(而不是对其他窗户的影响)并且玻璃效果边框的位置被严格控制,那么您可以这样: -

  <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>
Run Code Online (Sandbox Code Playgroud)

我不认为可视化树中的子元素能够获取它的父级的VisualBrush,因此这可能是对您的限制.(即背景面板不能包含玻璃面板)

我经常使用VisualBrushes多次使用TranslateTransforms将它们移动一点,以便在正确的位置获得正确的图像.

更新:

改变XAML使用Effect而不是BitmapEffect更慢,现在折旧如Steven Robbins在下面的评论中提到的那样.

  • 很好的例子,但出于性能原因,我不建议使用BitmapEffect.即使它现在看起来很好,但它可能会让你更进一步.您可以将该位更改为<Border.Effect> <BlurEffect Radius ="10"/> </ Border.Effect> (6认同)