具有透明背景且包含不透明控件的WPF窗口

78

我有一个外观如下的窗口:

enter image description here

然而,我想要的是,Window主要的Grid中的Button控件(灰色背景带有文本)透明度为1,完全不透明。由于我继承了这个项目,因此透明度在顶层设置为0.75,位于开头的Window标签内。现在,我理解这将自动强制所有子元素遵循相同的设置,且子元素不能覆盖。

那么我该如何实现透明背景但不透明的按钮?到目前为止,我找到的唯一方法(作为WPF的相对新手)是使用两个不同的窗口,其中一个是透明的背景,另一个没有背景,但包含不透明的控件。然而,这种方法太hacky了,如果可能的话,我想避免使用它。

如果需要,我可以提供代码,但它只是一个带有windowstyle=none和opacity .75的Window,其中包含一个非常基本的Button等控件的Grid

有人以前构建过这样的Window或者有生成它的见解吗?谢谢。

3个回答

148

不要设置窗口的不透明度,而是设置其背景的不透明度:

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        AllowsTransparency="True" WindowStyle="None">
    <Window.Background>
        <SolidColorBrush Opacity="0.5" Color="White"/>
    </Window.Background>
    <Grid>
        <Button Width="200" Height="50">button</Button>
    </Grid>
</Window>

1
非常感谢。我尝试了很多方法,没想到这么简单。 - kmarks2
@svinja,我们如何在托管在WinForms中的WPF用户控件中实现相同的效果? - RSB
@RSB 将用户控件的背景刷设置为透明或空。 - Gusdor
这是一个很重要的细微差别,我认为。我也在设置控件的 BackgroundOpacity 属性。以这种方式使用属性可以更好地控制嵌入式控件的外观和感觉。 - DonBoitnott

3
如果您创建了以下样式:
<Window.Resources>
    <Style TargetType="Button" x:Key="WindowButtons">
        <Setter Property="Opacity" Value="1"/>           
    </Style>
</Window.Resources>

那么,您可以在XAML中像这样引用它们来为按钮设置样式:
<Button Style="{StaticResource WindowButtons}">Tony</Button>

而且它不再继承其父元素的不透明度。


1
可以通过在设计师中将不透明度从100%设置为60%(根据需要)来实现上述效果。

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