如何在 WPF 中将 MessageBox 窗口保留在前台

Posted

技术标签:

【中文标题】如何在 WPF 中将 MessageBox 窗口保留在前台【英文标题】:How to keep a MessageBox window in the foreground in WPF 【发布时间】:2012-11-25 15:48:34 【问题描述】:

我需要显示一个文件夹对话框,以便用户可以在我的应用程序运行之前选择一个路径。我一切正常,但我似乎无法将错误消息框保持在前台。如果用户选择了错误的路径,则会弹出一个消息框,但它会留在桌面上任何打开的窗口后面的背景中。

我是 WPF 新手,使用此应用程序的 winforms 版本,我可以指定 fdb.ShowDialog(this),它会将错误消息框保持在前台。但使用 WPF 时,消息框窗口始终位于所有其他打开的窗口之后。

关于如何解决这个问题的任何想法?谢谢。

    while (!found)
    
        if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        
            if ((File.Exists(Path.Combine(fbd.SelectedPath, "user.exe"))))
                return fbd.SelectedPath;
            else                   
                System.Windows.Forms.MessageBox.Show("Cannot find user.exe in the selected path! Please try again.", "File Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);

        
    

【问题讨论】:

你有没有把上面的代码放在你的Window/UserControl..的构造函数中? @RV1987 不在构造函数中,它是从主窗口构造函数调用的方法“GetUserPath()”的一部分。我测试了构造函数中的所有代码,但 MessageBox 的行为没有变化。 是的,这就是重点,因为您正在从构造函数调用代码并且直到没有创建时间窗口。一旦代码通过您的构造函数,窗口就会被加载。 【参考方案1】:

将您的代码移动到 Window_Loaded 事件,而不是从构造函数调用它 -

<Window Loaded="Window_Loaded"/>

代码隐藏 -

private void Window_Loaded(object sender, RoutedEventArgs e)

    // Your code here

由于代码执行尚未通过构造函数,因此您的窗口尚未加载,同时会弹出错误消息。所以,一旦窗口被加载,它就会出现在消息框上。

【讨论】:

解决了问题!感谢您的帮助!我显然需要更多地练习 WPF!

以上是关于如何在 WPF 中将 MessageBox 窗口保留在前台的主要内容,如果未能解决你的问题,请参考以下文章

如何在 wpf 中测试 MessageBox?

在RadPane中心显示“MessageBox”

用不了System.Windows.Forms,如何使用MessageBox?

wpf关闭主窗口询问“退出”的问题

在WPF中MessageBox的显示如何定义其参数

wpf messagebox 的返回值如何获取