WPFプログラムにトレイメニューを素早く追加したい

WPFプログラムにトレイメニューを素早く追加したい

よく使われるトレイ機能はこれで十分カバーできるはずです。これらの効果を実現するために、自分で書くコードは本当に少なくて済みます

最終更新 2020/04/25 13:45
沙漠尽头的狼
読了目安 2 分
カテゴリ
WPF
タグ
.NET WPF トレイメニュー

1 シンプルな要件

  • オープンソースのコントロールライブラリを使用する
  • XAML でトレイメニューを宣言する。コントロールに ContextMenu を追加するのと同じように
  • よく使うコマンドをカプセル化: メインウィンドウを開く、アプリケーションを終了するなど

TerminalMACS にトレイメニューを追加しました。最終的なトレイメニューの効果は次の通りです:

2 実行方法

【Step 1】作成済みの WPF プロジェクトに HandyControl ライブラリを追加し、インストールします:

なぜ HC コントロールライブラリを使うのか?まずはデモ効果を見てみましょう:

一般的なトレイ効果はすべて満たせるはずです。これらの効果を実現するために、自分で書くコードは本当に少なくて済みます。HC がすでにカプセル化しているので、直接使用するだけです。

【Step 2】フォームに HandyControl 名前空間を追加します

xmlns:hc="https://handyorg.github.io/handycontrol"

【Step 3】トレイメニューを宣言する重要な 19 行のコード

<hc:NotifyIcon x:Name="NotifyIconContextContent"
            Text="{markup:I18n {x:Static i18NResources:Language.AppTitle}}"
            Visibility="Visible"
            Icon="/Images/logo.ico">
    <hc:NotifyIcon.ContextMenu>
        <ContextMenu>
            <MenuItem Command="hc:ControlCommands.PushMainWindow2Top" Header="{markup:I18n {x:Static i18NResources:Language.PushMainWindow2Top}}"/>
            <MenuItem Command="hc:ControlCommands.ShutdownApp" Header="{markup:I18n {x:Static i18NResources:Language.Exit}}"/>
        </ContextMenu>
    </hc:NotifyIcon.ContextMenu>
    <hc:Interaction.Triggers>
        <hc:EventTrigger EventName="Click">
            <hc:EventToCommand Command="hc:ControlCommands.PushMainWindow2Top"/>
        </hc:EventTrigger>
    </hc:Interaction.Triggers>
</hc:NotifyIcon>

上記のコードで、トレイメニューはほぼ完成です。簡単に説明します:

  • NotifyIcon はトレイメニューコントロールで、Text はトレイメニュー名を表示します。マウスをトレイアイコンに置くと、ToolTip にその文字列が表示され、通常はアプリケーション名を表示します。下図の通り:

  • hc:NotifyIcon.ContextMenu はメニュー項目を宣言するために使います。このプロジェクトでは現在、メインウィンドウを開く、アプリケーションを終了するの2つのメニューを追加しています。これらのコマンドは HC がすでにカプセル化しており、使いやすいです。 - さらに、トレイメニューをクリックすると、アプリケーションのメインウィンドウを表示することもできます。

【Step 4】メインウィンドウを手動で閉じるときは、非表示にして終了しない

トレイメニューを追加した後、メインウィンドウを閉じる際には、OnClosing イベントをオーバーライドして、直接閉じるのではなく、メインウィンドウを非表示にするべきです。

protected override void OnClosing(CancelEventArgs e)
{
    this.Hide();
    e.Cancel = true;
}

3 詳細情報

詳細なデモソースコードは HandyControl を参照してください。

本記事のソースコード: TerminalMACS

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2025/09/13

WPF から Avalonia への移行シリーズ:なぜ WPF プログラムを Avalonia に移行しなければならないのか

過去数年間、当社の上位機ソフトウェアは主に WPF と WinForm で開発されてきました。これらの技術は Windows プラットフォームで非常に便利であり、小規模試作から現在の規模拡大による納品まで、私たちを支えてきました。しかし、ビジネスの発展や顧客ニーズの変化に伴い、単一の Windows テクノロジースタックは私たちが必ず乗り越えなければならない壁となってきました。

続きを読む
同じカテゴリ / 同じタグ 2025/01/26

WPF カスタムXMLファイルによる国際化

この記事では、WPFプログラムでカスタムXMLファイルを使用して国際化を実現する方法について詳しく説明します。必要なNuGetパッケージのインストール、言語リストの動的取得、言語の動的切り替え、コードおよびXAMLインターフェースでの翻訳文字列の使用などを含み、ソースコードのリンクも提供し、開発者がWPFアプリケーションの国際化を簡単に実装できるように支援します。

続きを読む