web-dev-qa-db-ja.com

WPFを使用したシステムトレイへのアプリケーションの最小化(NotifyIconを使用しない)

アプリケーションの作成が終了したので、そのために "システムトレイ機能に最小化"を組み込みたいと思います。良い記事を読みました アプリをシステムトレイに最小化する 。これらがWindows.Formクラスを利用していることに気付きました。

残念ながら、Windows Presentation Foundation WPF reference を使用してアプリケーションUIを作成しました。これで、NotifyIconはWPFではサポートされていないことがわかりました。 CodePlexには、NotifyIconプロパティをシミュレートするオープンソースライブラリがあることがわかります WPF Contrib まだ使用していません。

今、私は修正中です。ここに私の質問があります:-

a)単一のコンポーネントだけにサードパーティのライブラリを組み込みたくありません。

b)WPFでNotifyIconを使用せずに最小化機能を実行できますか?はいの場合、誰かが私にリードをお願いできますか?

または、Windowsフォームを使用するようにUIを元に戻す必要がありますか?

20
rockstar

外部コンポーネントの使用に抵抗がある場合は、WPF NotifyIcon をお勧めします。私はそれを使用しました。それは簡単で、うまく機能します。

対応するWinFormsコンポーネントだけに依存するのではなく、豊富なツールチップ、ポップアップ、コンテキストメニュー、バルーンメッセージを表示するためにWPFフレームワークのいくつかの機能を活用する純粋に独立したコントロールです。

29
Marksl

今日、この投稿に出会いました。

参考のために、私はこれをしばらく前に解決しました。それは非常にうまく機能し、私が少し問題を抱えているのは、いくつかのマルチディスプレイ設定で時折しかありません。

これは、GITとNuGetが組み込まれる前のことでした。興味がある場合は、GITリポジトリに配置します。

CodeProjectの記事はこちら

2
Murray Foxcroft

ここにスレッドがあり、それは私を大いに助けました。

https://stackoverflow.com/a/12428063/10305444

public partial class Window : System.Windows.Window{


public Window()
{
    InitializeComponent();

    System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
    ni.Icon = new System.Drawing.Icon("Main.ico");
    ni.Visible = true;
    ni.DoubleClick += 
        delegate(object sender, EventArgs args)
        {
            this.Show();
            this.WindowState = WindowState.Normal;
        };
}

protected override void OnStateChanged(EventArgs e)
{
    if (WindowState == WindowState.Minimized)
        this.Hide();

    base.OnStateChanged(e);
}}
0
Maifee Ul Asad