Question

I have an app that minimizes to the system tray by clicking on "close" button and I want to save it's state (position, all elements (comboboxes, textboxes) with their values, etc).

Now I wrote this code, but it creates a new window from tray (instead of recovering the old one, with its parameters):

# 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();
      })

});

How I can modify this code for my problem?

Était-ce utile?

La solution

When you hold a reference to your `MainWindow´ then you can simple call Show() again after closing it. Closing the Window will simply hide it and calling Show again will restore it.

private Window m_MainWindow;

ni.DoubleClick +=
  delegate(object sender, EventArgs args)
  {
    if(m_MainWindow == null)
        m_MainWindow = new MainWindow();

    m_MainWindow.Show();
  };

If you´re sure that the MainWidnow is your Applications primary Window then you can also use this:

ni.DoubleClick +=
  delegate(object sender, EventArgs args)
  {
    Application.MainWindow.Show();
  };

I would prefer the first variant since it´s explicit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top