C# 如何通过在页面上显示半透明控件来禁用windows phone上的所有控件?

C# 如何通过在页面上显示半透明控件来禁用windows phone上的所有控件?,c#,mvvm,windows-phone-8,expression-blend,C#,Mvvm,Windows Phone 8,Expression Blend,我想在整个页面上显示某种半透明/半透明效果,然后在上面显示我的选项按钮,但我就是不知道怎么做,这让我抓狂!我已经在很多wp8应用程序中看到了它,所以它是可行的,但我只是不知道怎么做 显示此半透明/半透明效果后,如果单击或单击我的一个选项按钮,我希望它消失,并恢复屏幕原样或执行相应的操作 我设法通过使用故事板设置背景颜色来实现这一点,但奇怪的是,一旦显示和我的选项按钮出现,它们看起来很好,但一旦故事板完成,按钮看起来也被禁用了,这看起来就是错误的 如果在窗口上显示一个半透明的对话框,那么给“禁用”

我想在整个页面上显示某种半透明/半透明效果,然后在上面显示我的选项按钮,但我就是不知道怎么做,这让我抓狂!我已经在很多wp8应用程序中看到了它,所以它是可行的,但我只是不知道怎么做

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

我设法通过使用故事板设置背景颜色来实现这一点,但奇怪的是,一旦显示和我的选项按钮出现,它们看起来很好,但一旦故事板完成,按钮看起来也被禁用了,这看起来就是错误的

如果在窗口上显示一个半透明的对话框,那么给“禁用”效果的正确方法是什么

如有任何想法、建议或代码,将不胜感激


谢谢。

使用Blend指定VisualStates(查看|状态,然后是“状态”选项卡)。您可以使用VisualStateManager.gostate在代码隐藏中的状态之间切换。一种状态为正常,另一种状态为禁用所有控件。
Mike

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

你可能把事情弄得更复杂了。考虑下面的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秒左右。

您可能会让它变得比需要的更复杂。考虑下面的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秒左右。

你的意思是将IsEnabled设置为FALSE吗?@FarhadJabiyev,我认为OP想要创建一个覆盖。您可以通过将“提示”面板与“内容”面板放在一起(并在开始时隐藏)来实现这一点。“提示”面板应该有更高的zindex,并且可能有一个不透明度为0.7的白色背景。然后,覆盖层将有效地禁用其下方控件上的单击事件,直到您将其关闭。如果我的按钮在覆盖层中,它们也将由于不透明度而看起来被禁用,那么如何在半透明提示面板中获取不透明按钮?您的意思是将IsEnabled设置为FALSE吗?@FarhadJabiyev,我认为OP想要创建一个覆盖。您可以通过将“提示”面板与“内容”面板放在一起(并在开始时隐藏)来实现这一点。“提示”面板应该有更高的zindex,并且可能有一个不透明度为0.7的白色背景。然后,覆盖将有效地禁用其下方控件上的单击事件,直到您将其关闭。如果我的按钮在覆盖中,它们也将由于不透明而看起来被禁用,那么如何在半透明提示面板中获得不透明按钮?@NewDev,lthibodeaux我按照你们的建议做了,但我不得不移动覆盖中包含我的“选项按钮”的网格,但它们看起来也被禁用了。我怎样才能避开这件事?这几乎就是我所拥有的,正如我最初使用故事板时所提到的,按钮显示为启用状态,直到它完成,然后以某种方式变暗到与覆盖面板相同的级别。还有其他建议吗?覆盖的不透明度应该是100%,所以请检查最终关键帧,确保在动画完成后没有将其设置为更低的值。您应该仅“调暗”背景色属性。请注意,在上面的示例中,背景的alpha值约为65%不透明度。可能是我遗漏了什么,但将不透明度设置为100%不会使其完全不透明,因此后面的控件都不可见吗?你能不能把故事板排除在外,而不把动画包括在这个过程中,只是为了简化目前的事情?如果有帮助的话,我正在尝试获得与Weave应用程序类似的效果?我已经对动画进行了分类,但我正在努力解决这个问题。也许你可以看看它,因为它可能有助于更好地理解我试图实现的目标。一旦读到一篇文章,从右向左轻弹,你会看到按钮出现。我没说故事板是必要的。正如我提到的,简单的交互就是切换可见性。然而,为了澄清不透明度行为:只需尝试一次。在上述示例中,栅格背景色为65%不透明(alpha颜色值中为#AA),默认情况下,栅格背景色上的控件为100%不透明。100%的65%背景不透明度仍为65%。65%的不透明度65%将接近42%的不透明度。我只花了一年时间就恢复了