【问题标题】:How to disable all the controls on windows phone by displaying a semi transparent control over the page?如何通过在页面上显示半透明控件来禁用 windows phone 上的所有控件?
【发布时间】:2013-08-16 17:23:14
【问题描述】:

我想在整个页面上显示某种半透明/半透明效果,然后在其顶部显示我的选项按钮,但我就是不知道它是如何让我发疯的!我在很多 wp8 应用程序中都看到过它,所以它是可行的,但我就是不知道怎么做!

一旦显示此半透明/半透明效果,我希望它在单击或单击我的选项按钮之一时消失,并恢复屏幕原样或执行相应的操作。

我设法通过使用情节提要设置背景颜色来做到这一点,但奇怪的是,一旦显示并且我的选项按钮出现,它们看起来很好,但是一旦情节提要完成,按钮看起来也被禁用了看起来不对!!

什么是提供“禁用”效果的正确方法,就好像您在窗口上显示了一个半透明的对话框一样。

任何想法、建议或代码将不胜感激。

谢谢。

【问题讨论】:

  • 您的意思是将 IsEnabled 设置为 FALSE 吗?
  • @FarhadJabiyev,我认为 OP 想要创建一个覆盖。您可以通过在“内容”面板旁边定位(并最初隐藏)“提示”面板来做到这一点。 “提示”面板应该有更高的 zindex,并且可能是白色背景,不透明度为 0.7。然后覆盖层将有效地禁用其下方控件上的点击事件,直到您将其关闭。
  • 如果我的按钮在叠加层中,由于不透明,它们也会看起来被禁用,那么如何在半透明提示面板中获得不透明的按钮?

标签: c# mvvm windows-phone-8 expression-blend


【解决方案1】:

您可能使这变得比它需要的更复杂。例如,考虑以下 XAML:

<Grid x:Name="LayoutRoot">
  <Grid.RowDefinitions>
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>

  <Grid x:Name="ContentRoot">
    ...
  </Grid>

  <Grid x:Name="ContentOverlay" Background="#AA000000" Visibility="Collapsed">
    ...
  </Grid>
</Grid>

ContentRoot 和 ContentOverlay 都将锚定在 LayoutRoot 网格的左上角并跨越行高。它们将按照声明的顺序从最远到最近堆叠,因此 ContentRoot 将呈现在 ContentOverlay 下方。只需根据用户输入操作 ContentOverlay 的可见性。

或者,您可以将 ContentOverlay 的不透明度设置为 0 以及折叠可见性(这是必需的,因此它不会拦截对下面 ContentRoot 子控件的点击),并使用 Blend 中的情节提要淡入淡出。对用户来说,这可能看起来稍微干净一些,即使它只有 0.3 秒左右。

【讨论】:

  • @NewDev, lthibodeaux 我按照你们的建议做了,但我不得不在叠加层中移动包含我的“选项按钮”的网格,但它们看起来也被禁用了。我怎样才能解决这个问题?这几乎就是我所拥有的,正如我最初在使用故事板时所提到的,按钮在完成之前一直处于启用状态,然后以某种方式变暗到与覆盖面板相同的级别。还有其他建议吗?
  • 叠加层的不透明度应为 100%,因此请检查您的最终关键帧,以确保在动画完成后您没有将其设置为更低的值。您应该只“暗淡”背景颜色属性。请注意,在上面的示例中,给定 alpha 值的背景具有大约 65% 的不透明度。
  • 可能是我遗漏了一些东西,但不会将不透明度设置为 100% 使其完全不透明,因此我后面的任何控件都不可见?您能否将故事板排除在此之外,并且在此过程中不包括动画,只是为了暂时简化事情?如果有帮助,我正在尝试获得与 Weave 应用程序类似的效果?我已经对动画进行了排序,但我正在为此苦苦挣扎。也许你可以看看它,因为它可能有助于更好地理解我想要实现的目标。在一篇文章上,从右向左轻拂,您会看到按钮出现。
  • 我没有说故事板是必要的。正如我提到的,简单的交互是切换可见性。但是,为了澄清不透明行为:试一试。上面示例中的网格背景颜色为 65% 不透明(alpha 颜色值中的#AA),其上的控件默认为 100% 不透明。 100% 的 65% 背景不透明度仍然是 65%。 65% 的 65% 不透明度将更接近 42% 的不透明度。
  • 我只花了一年的时间才回到这一点,但我终于明白你的意思了,它运行良好。谢谢!
【解决方案2】:

使用 Blend 来指定 VisualStates(视图 | 状态。然后是“状态”选项卡。)您可以使用 VisualStateManager.GoToState 在代码中的状态之间切换。一种状态是正常的,另一种状态是所有控件都被禁用。 迈克

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 2011-01-20
    • 2011-05-24
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多