模糊不透明度

16

我需要创建一个透明的模糊背景。假设我有一个带有白色模糊透明背景的边框,边框后面的所有内容都是模糊的。

我正在尝试避免依赖项;我目前使用的是 .NET 3.0,并且希望它也能在 Windows XP 上运行。

模型图像:

模型图像

3个回答

19

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>

我认为在可视树中的子元素无法获取其父元素的VisualBrush,因此这可能是您的一个限制。(即玻璃面板不能被背景面板包含)

我经常使用VisualBrushes,通常使用TranslateTransforms来稍微移动它们,以便将正确的图像放置在正确的位置。

更新:

更改了XAML以使用Effect而不是BitmapEffect,后者速度较慢,并已被Steven Robbins在下面的评论中提到。


我几乎可以用Visual Brush完成它。你认为能否做出类似模型图像的效果?或者这就是你所说的“只要控制好玻璃效果边框的位置”吗?谢谢! - Artur Carvalho
找到了!需要 AlignmentX="Left" AlignmentY="Top" Stretch="None"。 - Artur Carvalho
6
不错的例子,但出于性能考虑,我不建议使用BitmapEffect。即使现在看起来很好,它在将来可能会影响你的程序性能。你可以将这一部分修改为<Border.Effect><BlurEffect Radius="10" /></Border.Effect>。 - Steven Robbins

3

我想您需要使用一个效果,应用于背景矩形或网格。

如果您感兴趣的话,这里有一个不错的效果库(链接)


0

它需要Vista操作系统。我正在尝试避免依赖关系。 - Artur Carvalho
只有在您愿意为旧机器降级时才是一个选项。 - Eclipse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接