2

「閉じる」ボタンをクリックしてシステムトレイに最小化するアプリがあり、その状態(位置、すべての要素(コンボボックス、テキストボックス)とその値など)を保存したい。

今、私はこのコードを書きましたが、トレイから新しいウィンドウを作成します (古いものをパラメータで回復するのではなく):

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

});

問題に合わせてこのコードを変更するにはどうすればよいですか?

4

1 に答える 1

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

明示的であるため、最初のバリアントを好みます。

于 2013-04-30T13:53:07.520 に答える