【问题标题】:What is the purpose of Popup in XAML Metro apps?XAML Metro 应用程序中弹出窗口的用途是什么?
【发布时间】:2015-09-22 13:52:14
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 当您使用 popup 时,将弹出窗口的宽度和高度设置为屏幕大小,并在主弹出窗口内为您的内容创建一个 div。当您调用弹出窗口更改主弹出窗口的不透明度并覆盖内容 div 的不透明度时。这将使底层禁用。我假设你没有母版页。
  • 它的 xaml 项目。没有 div.. 但我做了类似的事情

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


【解决方案1】:

区别:

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

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

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

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

【讨论】:

  • 您是说不需要将 Popup 放置在可视化树中即可显示它吗?真的吗?
  • 是的。你可以只做new Popup {Child = new TextBlock {Text = "Hello"}, IsOpen=true};,但除了简单的测试代码之外,我不鼓励这样做。
【解决方案2】:

我的应用需要一个模态对话框,但在 XAML Metro 应用中似乎没有这样的对话框。有人建议弹出窗口。

从 Windows 8.1 开始,实际上有一些类似于模态对话框的东西,您可能想研究一下: 它叫做Flyouts

【讨论】:

  • 模式对话框不在 XAML 中,它是 Windows.UI.Popups.MessageDialog。 msdn.microsoft.com/en-us/library/windows/apps/…
  • 是的,但是 Flyout 在 XAML 中,对吗? @BoppityBop 说他需要 XAML 中的模式对话框,我认为 Flyout 是一个不错的选择。
  • 我对这个问题的理解是,他在寻找一种模态对话框行为,即MessageDialog。我指出该 UI 不是直接在 XAML 中,而是在 Windows.UI.Popups 中。但是,如果您手动强制执行模态行为,当然可以使用 XAML 浮出控件。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多