Skip to main content
 首页 » 编程设计

wpf之您如何覆盖WPF中父控件的不透明度

2024年10月01日24lyhabc

在WPF中的Grid上设置不透明度时,所有子元素似乎都继承其Opacity。您如何让子元素不继承父元素的不透明度?

例如,下面的父网格在中间有一个子网格,其背景设置为红色,但是由于父级的不透明性,背景显示为粉红色。我希望子网格具有纯色,不透明的背景:

<Grid x:Name="LayoutRoot"> 
 
  <Grid Background="Black" Opacity="0.5"> 
    <Grid.RowDefinitions> 
      <RowDefinition Height="0.333*"/> 
      <RowDefinition Height="0.333*"/> 
      <RowDefinition Height="0.333*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="0.333*"/> 
      <ColumnDefinition Width="0.333*"/> 
      <ColumnDefinition Width="0.333*"/> 
    </Grid.ColumnDefinitions> 
 
    <-- how do you make this child grid's background solid red 
        and not inherit the Opacity/Transparency of the parent grid? --> 
    <Grid Grid.Column="1" Grid.Row="1" Background="Red"/> 
  </Grid> 
 
</Grid> 

请您参考如下方法:

我能够使用画笔在纯xaml中绘制主网格背景,从而实现类似目的。
这样,只有父网格将设置其不透明度,并且其子元素将不会继承它。

<Grid x:Name="LayoutRoot">        
      <Grid> 
        <Grid.Background> 
            <SolidColorBrush Color="Black" Opacity="0.5"/> 
        </Grid.Background> 
        <Grid.RowDefinitions> 
          <RowDefinition Height="0.333*"/> 
          <RowDefinition Height="0.333*"/> 
          <RowDefinition Height="0.333*"/> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="0.333*"/> 
          <ColumnDefinition Width="0.333*"/> 
          <ColumnDefinition Width="0.333*"/> 
        </Grid.ColumnDefinitions> 
 
        <Grid Grid.Column="1" Grid.Row="1" Background="Red" /> 
      </Grid>    
</Grid>