繁体   English   中英

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

[英]Windows phone7 custom messagebox with a popup

在我的应用程序中,我使用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();
                }
        };

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

发生这种情况的原因是因为所有这一切都发生在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。 但你确定要让弹出窗口先消失吗? 如果用户单击消息框上的取消怎么办? 通常,消息框直接出现在调用它的任何内容上,并且不会替换它。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM