在我的应用程序中,我使用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();
}
};
任何有关实现这一目标的建议都非常感谢。谢谢...!!!
答案 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将起作用!我测试了它,效果很好。我显然没有足够的代表对他发表评论。