web-dev-qa-db-ja.com

トレイアイコンのみを持つWPFアプリケーション

私は完全なWPF初心者であり、トレイに最小化されて起動するアプリケーションを作成する方法を誰かが教えてくれるのではないかと考えています。これは、RSSフィードを定期的に取得し、新しいフィードがあるときにToaster-Popupを作成するという考え方です。

アプリケーションにはメインウィンドウ(基本的にはすべてのフィードエントリを含む単なるリスト)が必要ですが、デフォルトでは非表示にする必要があります。

XAMLとWPFについて読み始めましたが、App.xamlのStartupUriがメインウィンドウを指している必要があることを知っていますが、SysTrayアイコンを実行してメインウィンドウを非表示にする適切な方法はわかりません(これもユーザーがウィンドウを最小化するとき、タスクバーではなくトレイに最小化することを意味します)。

ヒントはありますか?

137
Michael Stum

WPF用のNotifyIconはありません。

私の同僚は、この無料のライブラリを使用して、次のような効果を上げました。

109
Drew Noakes

System.Windows.FormsのNotifyIconコントロールを使用するか、Windows APIが提供するNotify Icon APIを使用する必要があります。 WPFはそのような同等の機能を提供せず、Microsoft Connectで何度か要求されています。

GitHubには、WPFアプリケーション内からSystem.Windows.Forms NotifyIconコンポーネントを使用するコードがあります。コードは https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/で表示できます。 AppWindow.xaml.cs

以下に要約ビットを示します。

ShowInTaskbar = FalseでWPFウィンドウを作成します。これは非表示状態でロードされます。

クラスレベルで:

private System.Windows.Forms.NotifyIcon notifyIcon = null;

OnInitialize()中:

notifyIcon = new System.Windows.Forms.NotifyIcon();
notifyIcon.Click += new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
notifyIcon.Icon = IconHandles["QuickLaunch"];

OnLoaded()中:

notifyIcon.Visible = true;

インタラクションの場合(上記のnotifyIcon.ClickおよびDoubleClickとして表示):

void notifyIcon_Click(object sender, EventArgs e)
{
    ShowQuickLaunchMenu();
}

ここから、コンテキストメニュー、ポップアップウィンドウなどのWPFコントロールとAPIの使用を再開できます。

とても簡単です。コンポーネントをホストするためのWPFウィンドウは必ずしも必要ありません。WPFアプリにウィンドウを導入するのに最も便利な方法です(通常、ウィンドウはApp.xamlで定義されたデフォルトのエントリポイントであるため)。 WPFラッパーまたはサードパーティコントロールが必要です。SWFコンポーネントは、.NET Frameworkの一部であるため、WPFもサポートしている.NET Frameworkインストール環境に存在することが保証されているためです(現在および将来のすべての.NET Frameworkバージョンが構築されます)。現在のところ、MicrosoftからSWFサポートが.NET Frameworkからすぐに削除されるという兆候はありません。

お役に立てば幸いです。

トレイアイコンを取得するために3.0より前のフレームワークコンポーネントを使用する必要があるのは少しチーズですが、Microsoftが説明したように、WPFの範囲内にシステムトレイの概念はありません。 WPFはプレゼンテーションテクノロジーであり、通知アイコンはオペレーティングシステム(「プレゼンテーション」ではない)の概念です。

98
Shaun Wilson

私は最近、この同じ問題を抱えていました。残念ながら、NotifyIconは現時点ではWindows.Formsコントロールにすぎません。使用したい場合は、フレームワークのその部分を含める必要があります。これは、WPFの純粋主義者がどれだけいるかにかかっていると思います。

迅速かつ簡単な開始方法が必要な場合は、これをチェックしてください WPF NotifyIcon controlon Code Project WinForms NotifyIconで。より新しいバージョンが利用できるようです 著者のウェブサイトで として NuGetパッケージ として。これは、これまでのところ私にとって最良かつ最もクリーンな方法のようです。

  • テキストではなく豊富なツールチップ
  • WPFコンテキストメニューとポップアップ
  • コマンドサポートとルーティングイベント
  • 柔軟なデータバインディング
  • OSが提供するデフォルトメッセージではなく、リッチバルーンメッセージ

見てみな。非常に使いやすい素晴らしいサンプルアプリも付属しており、見栄えの良いWindows Live MessengerスタイルのWPFポップアップ、ツールチップ、コンテキストメニューを使用できます。 RSSフィードの表示に最適で、同様の目的で使用しています。

48
Dale