wpf - 强制MessageBox在.net/WPF中的应用程序窗口顶部

标签 wpf .net-4.0 modal-dialog messagebox

在我的WPF应用程序中,有时我会遇到System.Windows.MessageBox。最初显示时,它会显示在我的主应用程序窗口的顶部,如我所愿。有没有一种方法可以强制我始终将其保留在主窗口的顶部?我的问题是,当显示MessageBox时,用户可以单击主应用程序窗口并将其置于最前面,这意味着MessageBox从 View 中隐藏了。在这种情况下,用户可能不会意识到它在那里,或者忘记了它,对他们而言,主应用似乎已冻结。

我已经阅读了许多有关此主题的主题,但是没有一个主题可以为我解决问题。

我应该补充一点,放置MessageBox的线程可能不是UI线程。
谢谢
汤姆

最佳答案

使用带有窗口“所有者”并通过您的窗口的MessageBox.Show版本。

MessageBox.Show(Application.Current.MainWindow, "Im always on top - of the main window");

如果您可能不在UI线程上,请尝试:
string msg="Hello!";
if (Application.Current.Dispatcher.CheckAccess()) {
    MessageBox.Show(Application.Current.MainWindow, msg);
}
else {
    Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(()=>{
        MessageBox.Show(Application.Current.MainWindow, msg);
    }));
}

您可以:
1. Invoke阻止您的线程,直到MessageBox被关闭或
2. BeginInvoke,在这种情况下,您的线程代码将继续执行,但UI线程将在MessageBox上阻塞,直到被关闭为止。

关于wpf - 强制MessageBox在.net/WPF中的应用程序窗口顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092564/

相关文章:

angularjs - 每次打开模态ui模态时,如何设置对textarea的关注?

asp.net - 设置 ASP.NET 图表中标签的最大宽度

multithreading - 如何确保线程之间唯一的本地状态以进行电子邮件队列处理

javascript - 从另一个页面打开 Bootstrap 模式

wpf - CompositeTransform 只在 silverlight 中使用吗?

.net - 接收从网页拖动到 WPF 窗口的图像

具有依赖属性的 WPF ValidationRule

c# - 如何在屏幕上的某个位置模拟鼠标点击?

c# - WPF richtextbox 上的多语言拼写检查

python - Flask - 将反馈数据存储到服务器