我有一个应用程序通过单击“关闭”按钮最小化到系统托盘,我想保存它的状态(位置,所有元素(组合框,文本框)及其值等)。
现在我编写了这段代码,但它从托盘创建了一个新窗口(而不是恢复旧窗口及其参数):
# app.xaml.cs:
this.ShutdownMode = ShutdownMode.OnExplicitShutdown;
// create a system tray icon
var ni = new System.Windows.Forms.NotifyIcon();
ni.Visible = true;
ni.Icon = QuickTranslator.Properties.Resources.MainIcon;
ni.DoubleClick +=
delegate(object sender, EventArgs args)
{
var wnd = new MainWindow();
wnd.Visibility = Visibility.Visible;
};
// set the context menu
ni.ContextMenu = new System.Windows.Forms.ContextMenu(new[]
{
new System.Windows.Forms.MenuItem("About", delegate
{
var uri = new Uri("AboutWindow.xaml", UriKind.Relative);
var wnd = Application.LoadComponent(uri) as Window;
wnd.Visibility = Visibility.Visible;
}),
new System.Windows.Forms.MenuItem("Exit", delegate
{
ni.Visible = false;
this.Shutdown();
})
});
如何针对我的问题修改此代码?
答案 0 :(得分:1)
当您持有对“MainWindow”的引用时,您可以在关闭它后再次简单地调用Show()。关闭窗口只会隐藏它,再次调用Show将恢复它。
private Window m_MainWindow;
ni.DoubleClick +=
delegate(object sender, EventArgs args)
{
if(m_MainWindow == null)
m_MainWindow = new MainWindow();
m_MainWindow.Show();
};
如果您确定MainWidnow是您的应用程序主窗口,那么您也可以使用它:
ni.DoubleClick +=
delegate(object sender, EventArgs args)
{
Application.MainWindow.Show();
};
我更喜欢第一个变种,因为它是明确的。