带有弹出窗口的Windows phone7自定义消息框

时间:2012-08-06 16:04:00

标签: c# windows-phone-7 windows-phone-7.1

在我的应用程序中,我使用Popup创建了一个自定义消息框(具有不同的背景颜色)。它有一个按钮,我已经实现了按钮点击事件。

在按钮单击中,它有一个消息框,根据“确定”或“取消”,它从那里开始执行操作。

问题是在我单击弹出窗口(自定义消息框)中的按钮后,消息框会加载,但弹出窗口(自定义消息框)仍会出现在后台。我需要自定义弹出窗口完全关闭并执行操作。因此,我使用popup.IsOpen = false;作为按钮单击中的第一个语句,但它仍然显示在后台,直到它完成整个按钮单击事件。我搜索了其他房产,但没有找到任何工作。

以下是代码

        Popup popup = new Popup();
        popup.Height = 300;
        popup.Width = 480;
        popup.VerticalOffset = 100;
        CustomMessageBox control = new CustomMessageBox();
        popup.Child = control;

        popup.IsOpen = true;
        this.IsEnabled = false;

        control.OK_BTN.Click += (s, args) =>
        {
            popup.IsOpen = false;
            this.IsEnabled = true;

            MessageBoxResult result = MessageBox.Show("Do you want to reset the settings ?", "Settings", MessageBoxButton.OKCancel);

                if (result == MessageBoxResult.OK)
                {
                    changeSettings();
                }
        };

任何有关实现这一目标的建议都非常感谢。谢谢...!!!

2 个答案:

答案 0 :(得分:2)

发生这种情况的原因是因为所有这一切都发生在UI线程上,直到您返回为止。在您的按钮处理程序返回之前,不会对UI进行任何更新。

如果你真的希望弹出窗口首先消失,你需要做类似的事情

        control.OK_BTN.Click += (s, args) =>
        {
            popup.IsOpen = false;
            this.IsEnabled = true;

            Dispatcher.BeginInvoke(() =>
                {
                    MessageBoxResult result = MessageBox.Show("Do you want to reset the settings ?", "Settings", MessageBoxButton.OKCancel);

                    if (result == MessageBoxResult.OK)
                    {
                        changeSettings();
                    }
                });
        };

这会强制在按钮处理程序返回后打开MessageBox。但你确定要让弹出窗口先消失吗?如果用户单击消息框上的取消怎么办?通常,消息框直接出现在调用它的任何内容之上,并且不会替换它。

答案 1 :(得分:1)

我只是在输入Negative Eddy所写的内容。

使用Dispatcher.BeginInvoke将起作用!我测试了它,效果很好。我显然没有足够的代表对他发表评论。