半透明背景和不透明前景wpf

本文关键字:wpf 不透明 背景 半透明 | 更新日期: 2023-09-27 18:08:52

我目前有以下xaml代码:

<Grid
    Name="rootGrid"
    Opacity=".25"
    Background="Black"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Stretch">
    <Border
        Background="Black"
        Margin="120">
        <Grid
            Background="White"
            Margin="8">
            <TextBlock
                Name="popupContent">
                Test
            </TextBlock>
            <Button
                Click="Button_Click">
                Test
            </Button>
        </Grid>
    </Border>
</Grid>

目前,Grid上的Opacity设置也应用于其子节点。

我只想把这个不透明度应用到它的背景颜色上,以达到变暗的效果,而不是应用在前景上。我该怎么做呢?

半透明背景和不透明前景wpf

使用半透明背景,如SolidColorBrush

<Grid ...>
    <Grid.Background>
        <SolidColorBrush Color="Black" Opacity="0.25"/>
    </Grid.Background>
    ...
</Grid>

或者在颜色中指定一个alpha值,比如

<Grid Background="#3F000000" ...>

技巧是不要将Opacity添加到整个Grid元素:

<Grid>
    <Grid.Background>
        <SolidColorBrush Color="Black" Opacity=".75"/>
    </Grid.Background>
    <!--(Other elements)-->
</Grid>

这对我很有效。我有两个网格根网格和RootContent子网格。我控制的不透明度的RootContent。"根"中的任何控制都不会生效。

<Grid x:Name="Root" KeyDown="Root_KeyDown" Tapped="Root_Tapped">
      <!--(Other elements)-->
   <Grid x:Name="RootContent">
          <!--(Other elements)-->
   </Grid>
</Grid>

不透明度将始终适用于儿童,所以我倾向于使用相同级别的画布来实现这种效果:

<Grid>
    <Canvas Opacity=".25"
        Background="Black"/>
    <Grid Name="rootGrid"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch">
        <Border
            Background="Black"
            Margin="120">
            <Grid
                Background="White"
                Margin="8">
                <TextBlock
                    Name="popupContent">
                    Test
                </TextBlock>
                <Button
                    Click="Button_Click">
                    Test
                </Button>
            </Grid>
        </Border>
    </Grid>
</Grid>