我想在XAML Metro App中模拟模态对话框。
所以我要在所有控件上设置.IsEnabled = false,而不是将作为模态对话框的控件。
显然IsEnabled不在Grid中而不在Panel中而不在FrameworkElement中。 如何禁用它而不是让用户控制它?
我猜Sinofsky切了这么多角落,整个事情现在更像是埃舍尔的楼梯。我失去了信仰。请帮忙
答案 0 :(得分:2)
在背景内容上设置IsHitTestVisible = false
。
此外,您可以将焦点设置为模态图层根目录中的某些内容,并在模态图层根目录上将TabNavigation
设置为Cycle
,以确保用户无法使用Tab键/ shift + tab。还要确保模态图层全部命中测试 - 例如 - 例如Transparent
或者有其他填充,因此用户无法点击它。
同时确保在您的模态图层可见时不显示Popups
。
答案 1 :(得分:2)
对不起,我参加派对有点晚了......
以下是我创建模态弹出窗口的方法 - 我使用了一个弹出式对话框,其中顶部和底部是透明的,以便后面的任何内容都能显示出来。弹出窗口时,我将其大小设置为覆盖整个屏幕。
弹出窗口的顶部和底部也设置为自动调整大小(height = *),以便它们填满整个屏幕的顶部和底部。这可以防止任何输入进入下面的网格。
以下是我在Visual Studio中弹出的屏幕截图:
弹出窗口是一个包含5行的网格,3个用于对话框本身,2个用于透明的顶部和底部。
以下是弹出窗口在我的应用中的外观。显然,网格通过透明的顶部和底部显示。由于弹出窗口填满整个屏幕,所以任何输入(键盘或鼠标)都会转到它而不是下面的网格,这使得弹出窗口就像一个模态对话框。
请注意,通过此策略,您必须处理这些事件:
答案 2 :(得分:0)
不幸的是,似乎没有人知道(除了Skakun先生,他给出了错误的答案并且从不打扰修改它。)
因此,我的解决方案(最简单的)是使有问题的元素隐藏 - 我无法找到任何其他方法来“禁用”网格。
如果我想正确地禁用它,我必须编写一个递归函数来查找grid子节点中的所有FrameworkElements并设置IsEnabled = false。