【问题标题】:MessageBox.Show for Windows Phone 7用于 Windows Phone 7 的 MessageBox.Show
【发布时间】:2011-01-03 17:18:01
【问题描述】:

我需要一个 MessageBox.Show(),但具有扩展功能:Windows Phone 7 的内置消息框不会显示任意按钮,只是确定或取消,例如我还需要 YesNo。我需要一个仅在用户单击按钮时才返回的 Show 方法。我试图让我自己的消息框作为弹出窗口。问题是它与 WP7 中的 UI 线程中的所有内容都是异步的,并且我无法阻止 UI 线程,因为 UI 线程也负责处理按钮单击事件。我看到了 WP7 的 ChildWindow 示例,但这也是异步的,我必须有一个 Show() 方法,该方法仅在用户单击时返回。有什么建议?某种 DoEvents() 可以帮到我很多,但在 WP7 中没有这样的方法:(

【问题讨论】:

    标签: silverlight windows-phone-7 messagebox


    【解决方案1】:

    您可以使用 XNA 的 Guide.BeginShowMessageBox() 来显示带有自定义按钮的 MessageBox。 Here's 使用教程。

    注意 MessageBoxIcon 参数在 WP7 上不会选择图标,而是选择消息框显示时的通知声音。

    编辑: 糟糕,在我发布之前没有阅读您的同步要求。也许您可以设置一个标志来停止您想要阻止运行的任何内容,并在用户做出选择后将其重置。

    【讨论】:

    • 是的,但我最大的问题是我必须使用仅在单击按钮时才返回的方法。例如,我可以使用计时器等到单击事件,如果条件满足,则在超时事件处理程序中继续程序,但我无法弄清楚如何在一种方法中实现这一点:(
    • AutoResetEvent waitHandle = new AutoResetEvent(false); Guide.BeginShowMessageBox("Windows 版本", "选择 Windows 版本。", new List { "Vista", "Seven" }, 0, MessageBoxIcon.Error, asyncResult => { int? returned = Guide. EndShowMessageBox(asyncResult); waitHandle.Set(); }, null); waitHandle.WaitOne();这不会阻塞 UI 线程!谢谢:)
    • 感谢发布解决方案
    • @Vic:不得不参考 Xna 来提供这样一个基本要求似乎很可惜。这源于您的代码在等待 UI 事件时阻塞的要求。你确定这不能用任何其他方式编码吗?
    • 代码很复杂,它是一个多平台框架,必须在不同平台上实现例如MessageBox.Show(),方法如下:它必须返回结果(按下按钮的文本)。完成此操作需要两个线程和线程同步,因为 Show() 必须阻塞程序才能返回结果。我知道这很遗憾,但我不知道任何其他解决方案,如果您知道,请告诉我。
    【解决方案2】:

    我在寻找类似的东西时发现了这个,但最终只使用了内置的消息框。它肯定会让您能够拥有自定义按钮。

    Windows Phone 7 Custom Message Box

    【讨论】:

    • 感谢您的回复,但是这个方案不满足 Show() 部分,只有任意按钮部分;如果我修改这个: NotificationBox.Show("Exit","Are you sure?", new NotificationBoxCommand("Yes", () => { }), new NotificationBoxCommand("No", () => { })) ;对此: AutoResetEvent waitHandle = new AutoResetEvent(false); NotificationBox.Show("Exit","Are you sure?", new NotificationBoxCommand("Yes", () => { waitHandle.Set(); }), new NotificationBoxCommand("No", () => { waitHandle.放(); })); waitHandle.WaitOne(); ...然后我陷入僵局,这是我的问题:(
    【解决方案3】:

    使用包含您想要的一切的画布。然后只需使用可见性属性将其弹出..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多