设置stackpanel不透明度而不影响子控件

时间:2013-08-01 11:52:34

标签: wpf

我是WPF的新手我有堆栈面板,在这个堆栈面板中我们在代码后面添加了Text Block,并在后面的代码中设置了堆栈面板背景和Text Block前景色。当我设置stackpanel的不透明度而不是影响它的子控件(即Textblock)时,我也设置了不透明度

请为此妥善解决。

谢谢。

4 个答案:

答案 0 :(得分:25)

如果您想在Xaml中执行此操作,可以在SolidColorBrush处创建Window.Resources作为面板的背景颜色:

<Window.Resources>
    <SolidColorBrush x:Key="TransparentBlue" Color="#00b0f0" Opacity="0.5" />
</Window.Resources>

然后只设置Background的{​​{1}}:

...Panel

答案 1 :(得分:1)

Background属性设置为可变Brush(而不是像Brushes.White那样的不可变属性)。例如,您可以创建SolidColorBrush

var background = new SolidColorBrush(Colors.White);
panel.Background = background;

您现在可以稍后在程序中更改该画笔的Opacity属性。

background.Opacity = 0.5;

您也可以使用GradientBrushImageBrush等任何其他画笔执行此操作。

答案 2 :(得分:0)

请阅读UIElement.Opacity Property

的备注
  

不透明度从元素树下的父元素应用到   子元素,但嵌套不透明度设置的可见效果   未在个别子元素的属性值中指出。   例如,如果列表具有50%(0.5)不透明度和其列表之一   items具有自己的不透明度设置为20%(0.2),净可见不透明度   该列表项目将被渲染为好像它是10%(0.1),但是   列表项的属性值Opacity属性仍为0.2   在查询时。

子控件不能具有父级的不透明度。我认为你将不得不使用两个单独的层,一个具有完全不透明度,另一个具有较少的不透明度。像这样的东西

<Grid>
    <StackPanel Opacity=".5" Background="whatever">
        ...
    </StackPanel>
    <StackPanel>
        <TextBlock Text="Text shown with full Opacity" />
    </StackPanel>
</Grid>

答案 3 :(得分:0)

这适用于Xamarin(白色透明色):

Color MyColor = Color.FromRgba(255,255,255,0.8);

Alpha似乎提供了比控件的Opacity属性更好的不透明度。