【问题标题】:Setting opacity to the grid changes the opacity of the children controls with each other in windows 8将不透明度设置为网格会在 Windows 8 中更改子控件的不透明度
【发布时间】:2015-04-04 04:23:16
【问题描述】:

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

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

我使用多层用户控件。当我将不透明度设置为它时,我会看到每一层,但用户控件内的层不应相互透明。

<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 的错误。

【问题讨论】:

  • 所以你想让网格透明,但它不是孩子?
  • 文本“Under”必须是不可见的,因为它位于文本“Over”之下,但整个 Grid 必须是半透明的
  • 这是不透明度的默认行为,即使在 wpf 和 silverlight 中也是如此。网格的每个子项的不透明度都将乘以它的父项不透明度。 0.5 * 1 在这种情况下。也许您可以添加一个边框控件作为第一个子控件,然后用它来做透明度。
  • 我将网格替换为边框,但没有任何改变。我还添加了 WPF 的屏幕截图。
  • 我不是这个意思。我的意思是添加一个额外的边框作为网格的第一个子元素,而不将内容放在边框中。

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


【解决方案1】:

在您的网格上设置 CacheMode="BitmapCache"。此行为不再是默认行为。

可能的原因是旧的行为需要将半透明元素渲染到单独的表面,需要更多的内存和两次渲染通道,而新的默认行为不需要,因此应该更快,更少的硬件限制并且仍然可以工作对于很多(如果不是大多数)情况。

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2013-03-04
    • 2011-08-05
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    相关资源
    最近更新 更多