> 作業効率UP!! オススメのモバイルモニターを紹介

【WPF】タスクトレイ(通知領域)にアイコンを表示する方法

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

タスクトレイにアイコンを表示するには!?

タスクトレイ(Windowsのタスクバーの右下にあるアイコンが並んでいる場所で、通知領域が正式名称)にアプリのアイコンを表示するためには、System.Windows.Forms.NotifyIconクラスを使います。

このクラスを使うことで、タスクトレイへのアイコン表示や右クリックメニューの追加、クリックイベントの設定が可能です。

この記事ではタスクトレイにアイコンを表示する方法や右クリックメニューを追加する方法等を分かりやすく解説しています。また、アイコン(*.ico)を作成する際に使えるオススメのサイトも紹介します。

この記事では以下の動作環境で実装しています。

開発環境

  • OS:Windows 11
  • 統合開発環境:Visual Studio 2022
  • .NETバージョン:.NET 7

是非参考してみてください。

オススメの参考書

C#の使い方が丁寧に解説しており、「基礎からしっかりと学びたい」という初心者の方にオススメの一冊です。サンプルコードも記載してあり、各章の最後に復習問題があるので理解度を確認しながら読み進めることができます。新しい C# のバージョンにも対応している書籍です。

タスクトレイにアイコンを表示する方法

それではNotifyIconを使用して、タクトトレイにアイコンを表示する方法について紹介をします。

事前準備

WPFでNotifyIconを使用するには、WPFのプロジェクトファイルでSystem.Windows.Formsを扱えるように設定する必要があります。

この設定は難しくなく、プロジェクトファイルを開いてコードを1行追加するだけの作業です。

手順は以下の通りです。

STEP
プロジェクトファイルを開く

ソリューションエクスプローラーのプロジェクト名をダブルクリックします。

画像に alt 属性が指定されていません。ファイル名: d326a07f693aef6c35aa109382f325b4-1.png
STEP
コードを追加する

<PropertyGroup>内に以下のコード(8行目)を追加します。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net7.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWPF>true</UseWPF>
	<UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

</Project>
STEP
リビルドする

追加したコードを反映させるために、プロジェクトをビルドしておきましょう。

アイコン準備

タスクトレイに表示するアイコンを準備します。アイコンのファイル形式は「*.ico」です。

drawソフトを使用してアイコンを作成することもできますが、ここでは画像ファイルをアイコンファイルに変換するサイトを紹介します。画像ファイル(*.png)をサクッとアイコンファイルに変換できます。

マルチアイコン作成

変換サイトの詳しい使い方は以下の記事で紹介していますので、参考にしてみて下さい。

アイコンファイルはプロジェクトに追加しておきます。

プロジェクトファイルを右クリックして[プロパティ]を選択し、プロパティを開きます。右側の項目一覧から[リソース]を選択し、アイコンファイルをドラッグアンドドロップして追加します。

リソースに追加されると下図のようにアイコンの画像と名前が表示されます。プロジェクトには[Resources]フォルダが作成され、そのフォルダの中にアイコンファイルが保存されます。

実装①

MainWindow.xaml.csに、NotifyIconのインスタンスを作成し、アイコンを設定します。

アイコンはResourcesクラスからアイコンファイルの名前を指定すれば取得できます。

using System.Windows;
using System.Windows.Forms;

namespace NotifyIconSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private NotifyIcon notifyIcon;

        public MainWindow()
        {
            InitializeComponent();
            SetupNotifyIcon();
        }

        /// <summary>
        /// NotifyIconをセットアップする
        /// </summary>
        private void SetupNotifyIcon() 
        {
            var icon = Properties.Resources.sample;

            notifyIcon = new NotifyIcon
            {
                Visible = true,
                Icon = icon,
                Text = "タスクトレイに表示"
            };
        }
    }
}

Visibleプロパティはタスクトレイにアイコンを表示するかどうかを選択できます。trueの場合、表示されます。

Iconプロパティはタスクトレイに表示するアイコンファイルを設定します。

Textプロパティはタスクトレイのアイコンにマウスオーバーした際に表示されるテキストです。

このコードを実行すると、次のようにタスクトレイにアイコンが表示されます。

実装②

続いて、コンテキストメニューを追加します。タスクトレイに表示されたアイコンを右クリックするとメニューが表示されるようになります。

ContextMenuStripプロパティにメニューを設定します。メニューのアイテムの間にセパレーターを追加したい場合はToolStripSeparatorを追加しましょう。

using System;
using System.Windows;
using System.Windows.Forms;

namespace NotifyIconSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private NotifyIcon notifyIcon;

        public MainWindow()
        {
            InitializeComponent();
            SetupNotifyIcon();
        }

        /// <summary>
        /// NotifyIconをセットアップする
        /// </summary>
        private void SetupNotifyIcon() 
        {
            var icon = Properties.Resources.sample;

            var contextMenuStrip = new ContextMenuStrip();
            contextMenuStrip.Items.AddRange(new ToolStripItem[]
            {
                new ToolStripMenuItem("バージョン v1.0.0")
                {
                    Enabled = false
                },
                new ToolStripSeparator(),
                new ToolStripMenuItem("終了", null, Exit_Click)
            });

            notifyIcon = new NotifyIcon
            {
                Visible = true,
                Icon = icon,
                Text = "タスクトレイに表示",
                ContextMenuStrip = contextMenuStrip
            };
        }

        private void Exit_Click(object? sender, EventArgs e)
        {
            notifyIcon.Visible = false;
            Close();
        }
    }
}

このコードを実行すると、次のように右クリックした時にメニューが表示されます。

実装③

続いて、タスクトレイに表示されたアイコンを左クリックするとアプリケーションが表示または非表示になる機能を追加します。

NotifyIconクラスのMouseClickイベントを実装することで、マウスでクリックした時の動作を定義することができます。

using System;
using System.Windows;
using System.Windows.Forms;

namespace NotifyIconSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private NotifyIcon notifyIcon;

        public MainWindow()
        {
            InitializeComponent();
            SetupNotifyIcon();
        }

        /// <summary>
        /// NotifyIconをセットアップする
        /// </summary>
        private void SetupNotifyIcon() 
        {
            var icon = Properties.Resources.sample;

            var contextMenuStrip = new ContextMenuStrip();
            contextMenuStrip.Items.AddRange(new ToolStripItem[]
            {
                new ToolStripMenuItem("バージョン v1.0.0")
                {
                    Enabled = false
                },
                new ToolStripSeparator(),
                new ToolStripMenuItem("終了", null, Exit_Click)
            });

            notifyIcon = new NotifyIcon
            {
                Visible = true,
                Icon = icon,
                Text = "タスクトレイに表示",
                ContextMenuStrip = contextMenuStrip
            };

            // アイコンクリック時のイベント設定
            notifyIcon.MouseClick += NotifyIcon_MouseClick;
        }

        private void Exit_Click(object? sender, EventArgs e)
        {
            notifyIcon.Visible = false;
            Close();
        }

        private void NotifyIcon_MouseClick(object? sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
            {
                return;
            }

            // 左クリック時の処理
            if (this.IsVisible)
            {
                this.Hide();
            }
            else 
            {
                this.Show();
            }
        }
    }
}

まとめ

この記事では、タスクトレイにアイコンを表示する方法を紹介しました。

System.Windows.FormsNotifyIconクラスを使用することで、 WPF のアプリケーションでも簡単にタスクトレイにアイコンを表示することができます。アイコンで使うファイル形式はアイコンファイル(*.ico)である必要があり、今回紹介した画像変換ツールを使うことでアイコンファイルを簡単に生成することができます。

この記事で紹介したコードを参考に、自分のアプリに合わせてカスタマイズしてみてください。

以上、最後まで読んで頂きありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!