不改变内容透明度的情况下更改背景透明度

28

我想知道如何在不影响子控件的情况下更改 WPF 窗口的背景透明度。当我将窗口属性 'Opacity' 更改为 0.5 时,我确实得到了一个半透明的窗口,但是窗口内部的图像也继承了 0.5 的透明度值,那么我怎样才能只让窗口本身的透明度改变呢?


只是订阅您的问题,以查看是否可能,我认为不可能,但以防万一。您尝试将其设置为“透明”颜色并添加半透明矩形,该矩形不会影响其他对象吗? - NestorArturo
1个回答

51
窗口是所有内容的父容器,因此在窗口上设置不透明度将影响其包含的所有内容。我认为您想要做的是更改Window.BackgroundOpacity

使窗口实现透明度需要添加几个步骤。首先,您需要设置Window.AllowsTransparency = True,并设置Window.WindowStyle = NoneWindowStyle.None创建一个没有窗口Chrome中最小化、最大化和关闭按钮的窗口,因此您需要自己处理应用程序的缩放和移动以及这些操作。完成后,您可以将Window.Background设置为具有设置了Opacity的brush。

以下代码示例将向您展示如何始终使窗口透明,并将窗口背景的不透明度设置为不同程度的值。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="WpfApplication1.MainWindow"
        x:Name="Window"
        WindowStyle="None"
        AllowsTransparency="True">
    <Window.Background>
        <SolidColorBrush Color="White" Opacity="0.5"/>
    </Window.Background>
    <Grid>
        <!--Window Content-->
    </Grid>
</Window>

如果您只想让窗口内的元素可见,您可以将窗口背景设置为透明。


我正在使用样式模板。为了让属性设置器正常工作,我将背景颜色的 alpha 值设置为所需的不透明度级别,并将背景 RGB 代码复制到背景设置器中。 :) 完美地运行! - C4d
这是一个很重要的细微差别,我认为。我也在设置控件的背景和不透明度属性。以这种方式使用属性可以更好地控制嵌入式控件的外观和感觉。 - DonBoitnott

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