将不透明度设置为网格会在Windows 8中相互更改子控件的不透明度

时间:2013-09-01 23:40:01

标签: c# microsoft-metro winrt-xaml opacity children

我有网格,我想将不透明度设置为50%。当我设置父元素的不透明度时,在其他元素下可以看到一些子控件。这仅在Metro应用程序中发生。

请告诉我如何应用Opacity类似于它在WPF中的工作方式。 我举一个简化的例子。就我而言,XAML非常复杂,因此Grid的颜色#80000000不是解决方案。

我使用多层用户控件。当我将Opacity设置为它时,我会看到每个图层,但用户控件内的图层不应该彼此透明。

<Grid Background="Black"
      Opacity="0.5">
    <Border Background="Red"
            Opacity="1">
        <TextBlock Text="Under"
                   FontSize="100" />
    </Border>
    <Border Background="Yellow"
            Opacity="1">
        <TextBlock Text="Over"
                   FontSize="100" />
    </Border>
</Grid>

它在Metro中的运作方式:http://i.stack.imgur.com/EM9oJ.png

它在WPF中的工作原理(所需):http://i.stack.imgur.com/tRGxi.png

例如,当我为我的书设置Opacity =“0.5”时,页面也变为半透明:http://i.stack.imgur.com/SvG0d.png

我认为这是Metro的错误。

1 个答案:

答案 0 :(得分:1)

设置CacheMode =&#34; BitmapCache&#34;在你的网格上。此行为不再是默认行为。

可能的原因是旧的行为需要将半透明元素渲染到需要更多内存和两个渲染过程的单独表面,而新的默认值并不是因为它应该更快,更少硬件约束和如果不是大多数情况下仍然有效。