wpf - 对窗口背景图像的模糊效果

标签 wpf xaml background blur effects

我有一个以图像为背景的窗口。在该窗口上,我还有按钮和其他控件。

这是我对该窗口的样式:

<Style x:Key="MyWindow" TargetType="{x:Type Window}">
        <Setter Property="Background">
            <Setter.Value>
                <ImageBrush ImageSource="Images\myImage.png" />
            </Setter.Value>
        </Setter>
        <Setter Property="Effect">
            <Setter.Value>
                <BlurEffect Radius="20" />
            </Setter.Value>
        </Setter>
    </Style>

问题是模糊效果应用于整个窗口,而不仅仅是背景图像。所以,我的按钮也模糊了,这不是我想要的。我只想模糊图像背景,而不是按钮。我该怎么做?

最佳答案

不要将 ImageBrush 用作窗口的背景,而是将 Image 控件作为第一个(最低)元素添加到窗口的顶级容器,并在此处设置效果:

<Window ...>
    <Grid>
        <Image Source="Images\myImage.png" Stretch="Fill">
            <Image.Effect>
                <BlurEffect Radius="20"/>
            </Image.Effect>
        </Image>

        <!-- other UI elements -->

    </Grid>
</Window>

如果您确实需要背景画笔,您可以使用 VisualBrush 而不是像这样的 ImageBrush:

<Style TargetType="Window">
    <Setter Property="Background">
        <Setter.Value>
            <VisualBrush>
                <VisualBrush.Visual>
                    <Image Source="Images\myImage.png">
                        <Image.Effect>
                            <BlurEffect Radius="20"/>
                        </Image.Effect>
                    </Image>
                </VisualBrush.Visual>
            </VisualBrush>
        </Setter.Value>
    </Setter>
    ...
</Style>

为了裁剪模糊背景画笔的边框,您可以像这样调整 Viewbox(默认情况下以相对单位给出):

<VisualBrush Viewbox="0.05,0.05,0.9,0.9">

当然,精确值取决于图像的绝对大小。您还可以通过设置 ViewboxUnits="Absolute" 以绝对单位指定 Viewbox:

<VisualBrush Viewbox="0,0,1024,1280" ViewboxUnits="Absolute">

关于wpf - 对窗口背景图像的模糊效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24904292/

相关文章:

c# - WPF - Canvas_MouseLeftButtonDown 事件

wpf - 如何在设计模式下从 ObjectDataProvider 获取 “null”?

.net - WPF 网格 SharedSizeGroup 错误

c# - 在代码隐藏中从 XAML 创建控件?

c# - 用户控制工具提示在透明部分不起作用

c# - 关闭窗口后出现 TaskCanceledException

c# - LiveCharts WPF 中单独着色的数据点

css - 如何去除使用线性渐变属性时出现的条纹

Linux 后台进程停止

HTML 编码 : Fix to Background Image Interfering with Navigation Bar