7

i am new in WPF i have stack panel and in this stack panel we added Text Block at code behind and also set stack panel background and Text Block foreground color at code behind. i have also set opacity dynamicaly when i set opacity of stackpanel than it affect on it's child control (i.e Textblock)

Please give me proper solution for this.

Thank you.

4

4 回答 4

30

如果您想在 中执行此操作,您可以在您的位置Xaml创建一个作为面板的背景颜色:SolidColorBrushWindow.Resources

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

然后只设置Background你的...Panel

<StackPanel Background="{StaticResource TransparentBlue}">
    <Label Content="Hello there" FontWeight="Bold" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center"></Label>
</StackPanel>
于 2013-08-01T12:37:11.533 回答
1

请阅读UIElement.Opacity 属性的备注

不透明度从元素树上的父元素应用到子元素,但嵌套不透明度设置的可见效果未在单个子元素的属性值中指示。例如,如果一个列表的不透明度为 50% (0.5),并且其中一个列表项的不透明度设置为 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>
于 2013-08-01T12:29:07.853 回答
1

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

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

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

background.Opacity = 0.5;

您也可以使用任何其他刷子(例如GradientBrushImageBrush等)来执行此操作。

于 2013-08-01T12:33:08.010 回答
0

这在 Xamarin(白色透明色)中对我有用:

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

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

于 2016-07-13T08:36:00.537 回答