我正在使用WPF NotifyIcon来创建系统托盘服务。当我显示一个消息框时,它会显示半秒钟,然后立即消失而不等待输入。
这种情况有happened before,通常的建议是使用接受Window
参数的重载。但是,作为系统托盘服务,没有窗口可用作父级,并且不接受null
。
有没有办法让MessageBox等待用户输入,而不是自己创建自定义MessageBox窗口?
答案 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();
我试过这个并且效果很好。不得不打开一个额外的窗口是不可取的,但它比制作你自己的消息框窗口更好,只是为了让这个工作。