2009-09-24 17 views
118

WPFの初心者です。トレイに最小化されたアプリケーションを書く方法を教えてください。新しいフィードがあるときは定期的にRSS Feedを取得し、Toaster-Popupを作成するという考え方です。トレイアイコンのみを持つWPFアプリケーション

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

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

ヒント

+3

すべてのご提案ありがとうございます! WPF-NotifyIconは簡単なテストではかなり有望で痛みのないことを示しているので、私が行っていることです。 –

答えて

94

WPF用のNotifyIconはありません。

私の同僚良い効果に、この自由に利用可能なライブラリを使用:

http://www.hardcodet.net/uploads/2009/04/image13.png

+1

すばらしい図書館。それを利用するために待って! –

+2

Drew、ここでリンクが消滅したように見えます。このライブラリの代替リンクはありますか?私はクイック検索をしましたが、その結果が同じプロジェクトのものかどうかは判断できませんでした。 –

+0

@BradLarson、サイトがダウンしているようです。しかし、とにかくプロジェクトはNugetパッケージとして利用可能です(Daleの答えを参照) –

47

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

これは、WinForms NotifyIconにまったく依存していないWPF NotifyIcon control on the Code Projectをチェックアウトするのを素早く簡単に確認したい場合に使用します。最近のバージョンはon the author's websiteとなり、NuGet packageと表示されます。これはこれまでのところ、私にとって最高でクリーンな方法のようです。

  • リッチツールヒントテキストではなく
  • WPFのコンテキストメニューやポップアップ
  • コマンドのサポートと
  • リッチバルーンメッセージではなく、デフォルトのメッセージを結合フレキシブルなデータが で提供するイベント
  • をルーティングOS

それをチェックしてください。それは、非常に使いやすい、驚くべきサンプルアプリケーションも付属しています。あなたは素晴らしいWindows Live MessengerスタイルのWPFポップアップ、ツールチップ、およびコンテキストメニューを持つことができます。 RSSフィードを表示するのに最適ですが、同様の目的で使用しています。

+2

は2017年の新人のため、そのナゲットパッケージは廃止されていますが、https://www.nuget.org/packages/Hardcodet.NotifyIcon.Wpf/ – mcy

77

System.Windows.FormsのNotifyIconコントロールを使用するか、Windows APIが提供するNotify Icon APIを使用する必要があります。 WPFこのような同等の機能は提供されておらず、Microsoft Connectで数回要求されています。私はWPFアプリケーション内からSystem.Windows.Forms NotifyIconコンポーネントを使用GitHubの上にコードを持っている、コードここhttps://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs

で見ることができる

要約ビットである:

は偽ShowInTaskbar =と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ウィンドウが必要なわけではありません.WindowsアプリケーションをWPFアプリケーションに導入する最も便利な方法です(App.xamlを使用して定義された一般的なデフォルトエントリポイントです)。同様に、 WPF Wrapperまたはサードパーティ製のコントロールが必要です。SWFコンポーネントは、.NET Frameworkの一部であることからWPFサポートを備えています(現在および将来の.NET Frameworkのすべてのバージョンが構築されるため)。現在までに、いつでもSWFサポートが.NET Frameworkからすぐに削除されるという兆候はありません。

希望に役立ちます。

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

+2

という別の名前で公開されています。 –

+2

+1、これは説明だけのための選択された答えでなければなりません。 – ToastyMallows

+1

最後の段落の功績。それはまさに私が知る必要があったものであり、それは良い開発者を抱かせるこのレベルのシンプルで洞察力のある詳細です。 – series0ne

関連する問題