WPF MessageBox不等待结果[WPF NotifyIcon]

时间:2014-03-14 10:57:21

标签: c# .net wpf messagebox notifyicon

我正在使用WPF NotifyIcon来创建系统托盘服务。当我显示一个消息框时,它会显示半秒钟,然后立即消失而不等待输入。

这种情况有happened before,通常的建议是使用接受Window参数的重载。但是,作为系统托盘服务,没有窗口可用作父级,并且不接受null

有没有办法让MessageBox等待用户输入,而不是自己创建自定义MessageBox窗口?

2 个答案:

答案 0 :(得分:16)

您无需为此创建代理窗口。只需将 MessageBoxOptions.DefaultDesktopOnly 添加到您的消息框中,它就会在桌面上触发而不会消失。

实施例

MessageBox.Show("My Message", "Title", MessageBoxButton.OK, 
    MessageBoxImage.Information, MessageBoxResult.OK, 
    MessageBoxOptions.DefaultDesktopOnly);

答案 1 :(得分:0)

根据答案here,解决方法是实际打开一个不可见的窗口并将其用作MessageBox的父级:

        Window window = new Window()
        {
            Visibility = Visibility.Hidden,
            // Just hiding the window is not sufficient, as it still temporarily pops up the first time. Therefore, make it transparent.
            AllowsTransparency = true,
            Background = System.Windows.Media.Brushes.Transparent,
            WindowStyle = WindowStyle.None,
            ShowInTaskbar = false
        };

        window.Show();

...然后使用适当的参数打开MessageBox:

        MessageBox.Show(window, "Titie", "Text");

...当你完成时(可能在应用程序退出时)不要忘记关闭窗口:

        window.close();

我试过这个并且效果很好。不得不打开一个额外的窗口是不可取的,但它比制作你自己的消息框窗口更好,只是为了让这个工作。