1

我的应用程序需要一个模式对话框,但在 XAML Metro 应用程序中似乎没有类似的东西。有人建议弹出窗口。

我试过了,似乎底层 UI 仍然响应......所以弹出窗口不是模态的。

我认为 OK 可能是它的目的是成为屏幕中心的弹出窗口,而不管其他布局和它是否出现 - 不是。弹出窗口与其他所有内容一样绑定到布局。如果它在网格中,它将被放置在第 0 行和第 0 列,而不是在中心。

所以可能我错过了什么。请帮助理解。我找不到任何与使用 Grid 可以实现的不同的用途。

Popup 的目的是什么?它与任何其他内容控件有何不同?

4

3 回答 3

2

差异:

  1. 您不必将其作为另一个控件的子项。尽管在这种情况下,您可能会在遍历可视化树时遇到问题,并且专注于 TextBox 不会改变其内容,因此虚拟键盘可能会覆盖其内容,或者其装饰内容可能会与不在弹出窗口上的装饰控件失去对齐。

  2. 它的内容树呈现在任何其他内容之上,并且(我相信)不会被父控件的剪辑区域剪辑。

  3. 您通常需要在首次显示或父布局(或大小)更改时手动设置其宽度和高度,尤其是在最常见的场景之一中,当您将其宽度和高度设置为父级(或窗口)的宽度和高度时)。

也就是说 - 模态对话框是糟糕的 UI,应该避免。如果您想要显示对话框或使用其他方法,您可以简单地导航到另一个页面。(几乎)没有什么比在 UI 上显示一个模式对话框更烦人的了,该对话框看起来以其他方式启用但不响应输入。

于 2013-01-18T23:28:24.113 回答
1

我的应用程序需要一个模式对话框,但在 XAML Metro 应用程序中似乎没有类似的东西。有人建议弹出窗口。

从 Windows 8.1 开始,实际上您可能想要查看类似于模式对话框的内容:它称为Flyouts

于 2014-03-21T21:27:37.970 回答
1

显然,Windows 8.1 中缺少带有自定义内容的模式弹出窗口。一种可能的解决方法:

  1. 使用Popup控件(本身不是模态的)
  2. 使背景半透明
  3. 在整个屏幕上拉伸它
  4. 将实际的弹出内容放在该容器内并在其周围留出一些空间

现在,父页面可见但变暗,并且无法访问,因为它Popup正在覆盖它。

于 2015-09-14T21:47:20.763 回答