如何在XAML Metro应用程序中禁用Grid(Panel)?

时间:2013-01-18 23:17:04

标签: c# xaml windows-8 windows-runtime

我想在XAML Metro App中模拟模态对话框。

所以我要在所有控件上设置.IsEnabled = false,而不是将作为模态对话框的控件。

显然IsEnabled不在Grid中而不在Panel中而不在FrameworkElement中。 如何禁用它而不是让用户控制它?

我猜Sinofsky切了这么多角落,整个事情现在更像是埃舍尔的楼梯。我失去了信仰。请帮忙

3 个答案:

答案 0 :(得分:2)

在背景内容上设置IsHitTestVisible = false

此外,您可以将焦点设置为模态图层根目录中的某些内容,并在模态图层根目录上将TabNavigation设置为Cycle,以确保用户无法使用Tab键/ shift + tab。还要确保模态图层全部命中测试 - 例如 - 例如Transparent或者有其他填充,因此用户无法点击它。

同时确保在您的模态图层可见时不显示Popups

答案 1 :(得分:2)

对不起,我参加派对有点晚了......

以下是我创建模态弹出窗口的方法 - 我使用了一个弹出式对话框,其中顶部和底部是透明的,以便后面的任何内容都能显示出来。弹出窗口时,我将其大小设置为覆盖整个屏幕。

弹出窗口的顶部和底部也设置为自动调整大小(height = *),以便它们填满整个屏幕的顶部和底部。这可以防止任何输入进入下面的网格。

以下是我在Visual Studio中弹出的屏幕截图: enter image description here

弹出窗口是一个包含5行的网格,3个用于对话框本身,2个用于透明的顶部和底部。

以下是弹出窗口在我的应用中的外观。显然,网格通过透明的顶部和底部显示。由于弹出窗口填满整个屏幕,所以任何输入(键盘或鼠标)都会转到它而不是下面的网格,这使得弹出窗口就像一个模态对话框。

Popup with grid underneath

请注意,通过此策略,您必须处理这些事件:

  • 屏幕调整大小(全屏,捕捉视图,填充视图) - 您需要调整弹出窗口的大小以适应每种视图状态
  • 屏幕旋转 - 再次,你必须处理调整大小
  • 键盘弹出 - 您需要将弹出窗口向上移动,以便屏幕键盘不会干扰它。

答案 2 :(得分:0)

不幸的是,似乎没有人知道(除了Skakun先生,他给出了错误的答案并且从不打扰修改它。)

因此,我的解决方案(最简单的)是使有问题的元素隐藏 - 我无法找到任何其他方法来“禁用”网格。

如果我想正确地禁用它,我必须编写一个递归函数来查找grid子节点中的所有FrameworkElements并设置IsEnabled = false。