C#

【WPF】ToolBarの使い方と実装方法(操作ボタンの処理をXAMLで実装する)

ユーザーがアプリケーションを操作する際に作業効率を上げる方法として、よく利用する機能を「ToolBar」に並べて画面の上部に配置することがあります。

画面の上部に配置することで、ユーザーが機能を使いたい時にすぐにその機能を利用することができ、ユーザーにとって利便性の高いアプリを作成することができます。

今回はWPFのコントロールの1つである「ToolBar」の使い方と実装方法について解説をします。

  • ToolBarの基本的な使い方
  • ToolBarのボタンにアイコンを表示する方法
  • ToolBarのボタンにヒント(補助説明)を表示する方法
  • ToolBarのデータバインディングのサンプルを紹介

この記事を通して、ToolBarについて理解して頂ければ幸いです。

ToolBarとは

ToolBar(ツールバー)とは、アプリケーションの操作ボタンを画面上部等に並べて、ワンクリックで実行できるようにしたコントロールです。よく利用する「印刷」や「保存」といった操作をアイコン付きのボタンに割り当てる事で、ユーザーが直観的に操作する事ができ、作業効率が上げることができます。

その利便性故に、Microsoftの製品(Word2003やExcel2003、visual studio)やファイル比較ソフト(WinMarge)など様々なアプリケーションに設置されています。

最近のMicroSoftの製品(Word2007やExcel2007以降、ペイント)は、ToolBarではなくToolBarではなくRibbonが画面の上部に設置されています。

画像の準備

ユーザーが直観的に操作できるようにボタンにはアイコンを貼り付けます。このアイコン画像をインターネットでダウンロードしておきましょう。

今回はここのサイトでアイコン画像をダウンロードしました。

まずはWPFのプロジェクトを作って、プロジェクトに新しいフォルダを作成します。フォルダは任意の名前に変更をします。ここでは「Icons」という名前にしました。

ツールバーで使う画像をまとめて選択してドラッグアンドドロップでフォルダに保存します。

ToolBarの使い方と実装方法

まずは基本的な使い方から紹介します。

ToolBarにボタンを追加する

XAMLにToolBarコントロールを配置します。ToolBarの子要素としてButtonコントロールを含めます。

ボタンには先ほどダウンロードしたアイコン画像を設定します。画像が大きすぎないようにアイコンの大きさを微調整をします。

この時の画面は下の図のようになります。

<Window
    x:Class="ToolBar.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <ToolBar
            Width="792"
            Height="50"
            HorizontalAlignment="Left"
            VerticalAlignment="Top">
            <Button>
                <Image Source="Icons\Open.png" Margin="10"/>
            </Button>
        </ToolBar>
    </Grid>
</Window>

ツールバーをWPFで利用する場合はToolBarクラスを使います。

 

ToolBarにアイコン画像が表示されない場合は、画像のプロパティを開いて「出力ディレクトリにコピー」を”常にコピーする”に変更したり、ビルドアクションを項目を変更してみましょう。

ToolBarへ追加する方法が分かったところで、他にも必要な操作対象のボタンを追加していきます。

ToolBarではボタンをある程度関連性のある操作をグループ単位で仕切ります。この時に使用するのがSeparatorです。このクラスを入れると縦の線でセパレートすることが可能です。

Separatorを追加した画面が下の図です。

<Window
    x:Class="ToolBar.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <ToolBar
            Width="792"
            Height="50"
            HorizontalAlignment="Left"
            VerticalAlignment="Top">
            <Button Margin="5,0,5,0">
                <Image Margin="5" Source="Icons\Open.png" />
            </Button>
            <Separator />
            <Button Margin="5,0,0,0">
                <Image Margin="5" Source="Icons\Undo.png" />
            </Button>
            <Button Margin="0,0,5,0">
                <Image Margin="5" Source="Icons\Redo.png" />
            </Button>
            <Separator />
            <ComboBox
                Width="50"
                Height="30"
                Margin="10,0,5,0"
                SelectedIndex="0">
                <ComboBoxItem Content="12" />
                <ComboBoxItem Content="14" />
                <ComboBoxItem Content="16" />
                <ComboBoxItem Content="18" />
            </ComboBox>
            <Button>
                <Image Margin="8" Source="Icons\Bold.png" />
            </Button>
            <Button>
                <Image Margin="8" Source="Icons\Italic.png" />
            </Button>
            <Button>
                <Image Margin="8" Source="Icons\Underline.png" />
            </Button>
        </ToolBar>
    </Grid>
</Window>

グループ単位でアイコンを分ける場合は、Separatorクラスを使います。

 

ToolTip(ツールチップ)を表示する

アイコン画像のボタンの操作内容をユーザーに知らせる役割があります。マウスオーバーした際にそのアイコンボタンの横に補足説明を表示することができます。

ToolBarを扱う場合は、この機能は無くてはならないものです。

設定方法は簡単でToolTipプロパティに文字列を設定するだけで表示されます。

<Window
    x:Class="ToolBar.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <ToolBar
            Width="792"
            Height="50"
            HorizontalAlignment="Left"
            VerticalAlignment="Top">
            <Button Margin="5,0,5,0" ToolTip="ファイルを開く">
                <Image Margin="5" Source="Icons\Open.png" />
            </Button>
            <Separator />
            <Button Margin="5,0,0,0" ToolTip="戻る">
                <Image Margin="5" Source="Icons\Undo.png" />
            </Button>
            <Button Margin="0,0,5,0" ToolTip="進む">
                <Image Margin="5" Source="Icons\Redo.png" />
            </Button>
            <Separator />
            <ComboBox
                Width="50"
                Height="30"
                Margin="10,0,5,0"
                SelectedIndex="0"
                ToolTip="フォントサイズ">
                <ComboBoxItem Content="12" />
                <ComboBoxItem Content="14" />
                <ComboBoxItem Content="16" />
                <ComboBoxItem Content="18" />
            </ComboBox>
            <Button ToolTip="太字">
                <Image Margin="8" Source="Icons\Bold.png" />
            </Button>
            <Button ToolTip="斜め">
                <Image Margin="8" Source="Icons\Italic.png" />
            </Button>
            <Button ToolTip="下線">
                <Image Margin="8" Source="Icons\Underline.png" />
            </Button>
        </ToolBar>
    </Grid>
</Window>

ユーザーの理解を手助けする補足説明を表示するには、コントロールが持つToolTipプロパティを使用します。

 

ボタンやコンボボックスで操作をする処理を記述する

ToolBar内のボタンをクリックした時やコンボボックスを選択した時に行う処理をコードビハインド側で記述する方法とXAML側で記述する方法の2通りがあります。

例としてテキストボックスのフォントサイズを選択したコンボボックスの値によって変更をする処理について確認してみましょう。

 

コードビハインド側で記述する方法

SelectionChangedプロパティにイベント名を入力します。入力してEnterキーを押下すると、コードビハインドのファイルにイベント処理が追加されます。

あとはテキストボックスのFontSizeプロパティにComboBoxで選択した値を設定してフォントサイズを変更します。

<Window
    x:Class="ToolBar.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <ToolBar
            Width="792"
            Height="50"
            HorizontalAlignment="Left"
            VerticalAlignment="Top">
            <Button Margin="5,0,5,0" ToolTip="ファイルを開く">
                <Image Margin="5" Source="Icons\Open.png" />
            </Button>
            <Separator />
            <Button Margin="5,0,0,0" ToolTip="戻る">
                <Image Margin="5" Source="Icons\Undo.png" />
            </Button>
            <Button Margin="0,0,5,0" ToolTip="進む">
                <Image Margin="5" Source="Icons\Redo.png" />
            </Button>
            <Separator />
            <ComboBox
                Name="cmbFontSize"
                Width="50"
                Height="30"
                Margin="10,0,5,0"
                SelectedIndex="0"
                SelectionChanged="cmbFontSize_SelectionChanged"
                ToolTip="フォントサイズ">
                <ComboBoxItem Content="12" />
                <ComboBoxItem Content="14" />
                <ComboBoxItem Content="16" />
                <ComboBoxItem Content="18" />
            </ComboBox>
            <Button ToolTip="太字">
                <Image Margin="8" Source="Icons\Bold.png" />
            </Button>
            <Button ToolTip="斜め">
                <Image Margin="8" Source="Icons\Italic.png" />
            </Button>
            <Button ToolTip="下線">
                <Image Margin="8" Source="Icons\Underline.png" />
            </Button>
        </ToolBar>
        <TextBox
            x:Name="txtMemo"
            Margin="10,60,10,10"
            FontSize="12" />
    </Grid>
</Window>
namespace ToolBar
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void cmbFontSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //選択項目がテキストに入力される前にイベントが発生するので非同期で遅延処理を行う
            await Task.Delay(10);

            //senderをComboBoxにキャストしてテキストプロパティの値を取得
            var value = ((ComboBox)sender).Text;
            if (value == "") return;

            //値をdouble型に変更する
            txtMemo.FontSize = double.Parse(value);
        }
    }
}

 

XAML側で記述する方法

続いてXAML側で記述する方法ですが、先ほどよりシンプルに書くことができます。コードビハインドへの書き込みは一切不要になります。

TextBoxのフォントサイズにComboBoxのテキストプロパティをバインディングします。バインディングの方法ですが、ElementNameにComboBoxの名前(事前にComboBoxのNameプロパティを設定しておきます)を指定して、PathにはTextプロパティを指定します。

これで、ComboBoxのTextプロパティにセットされている値がTextBoxのFontSizeプロパティへバインドされます。

実行結果はコードビハインドと同じ動作になります。

<Window
    x:Class="ToolBar.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <ToolBar
            Width="792"
            Height="50"
            HorizontalAlignment="Left"
            VerticalAlignment="Top">
            <Button Margin="5,0,5,0" ToolTip="ファイルを開く">
                <Image Margin="5" Source="Icons\Open.png" />
            </Button>
            <Separator />
            <Button Margin="5,0,0,0" ToolTip="戻る">
                <Image Margin="5" Source="Icons\Undo.png" />
            </Button>
            <Button Margin="0,0,5,0" ToolTip="進む">
                <Image Margin="5" Source="Icons\Redo.png" />
            </Button>
            <Separator />
            <ComboBox
                Name="cmbFontSize"
                Width="50"
                Height="30"
                Margin="10,0,5,0"
                SelectedIndex="0"
                ToolTip="フォントサイズ">
                <ComboBoxItem Content="12" />
                <ComboBoxItem Content="14" />
                <ComboBoxItem Content="16" />
                <ComboBoxItem Content="18" />
            </ComboBox>
            <Button ToolTip="太字">
                <Image Margin="8" Source="Icons\Bold.png" />
            </Button>
            <Button ToolTip="斜め">
                <Image Margin="8" Source="Icons\Italic.png" />
            </Button>
            <Button ToolTip="下線">
                <Image Margin="8" Source="Icons\Underline.png" />
            </Button>
        </ToolBar>
        <TextBox
            x:Name="txtMemo"
            FontSize="{Binding ElementName=cmbFontSize, Path=Text}"
            Margin="10,60,10,10" />
    </Grid>
</Window>
namespace ToolBar
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

バインディングの他に、単純な処理であればCommond(コマンド)と使ってアイコンの処理を実行することが可能です。

単純な処理の例として「コピーする」や「ペーストする」などがあります。これらは、わざわざイベントを作成することなく、Commondプロパティに実行したいコマンド名を入力するだけでその処理を実現することができます。

また、Modelの状態によってその処理が実行されるかどうかを切り替えることが可能です。

ここでは、「戻る」ボタンと「進む」ボタンにCommondを追加しました。

実行した結果は次の通りです。

<Window
    x:Class="ToolBar.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <ToolBar
            Width="792"
            Height="50"
            HorizontalAlignment="Left"
            VerticalAlignment="Top">
            <Button Margin="5,0,5,0" ToolTip="ファイルを開く">
                <Image Margin="5" Source="Icons\Open.png" />
            </Button>
            <Separator />
            <Button Margin="5,0,0,0" Command="Undo" ToolTip="戻る">
                <Image Margin="5" Source="Icons\Undo.png"/>
            </Button>
            <Button Margin="0,0,5,0" Command="Redo" ToolTip="進む">
                <Image Margin="5" Source="Icons\Redo.png" />
            </Button>
            <Separator />
            <ComboBox
                Name="cmbFontSize"
                Width="50"
                Height="30"
                Margin="10,0,5,0"
                SelectedIndex="0"
                ToolTip="フォントサイズ">
                <ComboBoxItem Content="12" />
                <ComboBoxItem Content="14" />
                <ComboBoxItem Content="16" />
                <ComboBoxItem Content="18" />
            </ComboBox>
            <Button ToolTip="太字">
                <Image Margin="8" Source="Icons\Bold.png" />
            </Button>
            <Button ToolTip="斜め">
                <Image Margin="8" Source="Icons\Italic.png" />
            </Button>
            <Button ToolTip="下線">
                <Image Margin="8" Source="Icons\Underline.png" />
            </Button>
        </ToolBar>
        <TextBox
            x:Name="txtMemo" 
            TextWrapping="Wrap" 
            AcceptsReturn="True"
            FontSize="{Binding ElementName=cmbFontSize, Path=Text}"
            Margin="10,60,10,10" />
    </Grid>
</Window>
namespace ToolBar
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

 

まとめ

この記事ではWPFのコントロールの1つであるToolBarの使い方と実装方法について紹介をしました。

ユーザーの作業効率を向上するには必要な不可欠なコントロールなので、アプリに組み込めばユーザーに喜ばれることは間違いないでしょう。

ぜひこの機会に使ってみてはいかがでしょうか。

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

参考記事

【WPF】ComboBoxの使い方と実装方法を解説(バインド)WPFでComboBox(コンボボックス)の初期化、アイテムの追加(バインド)、選択された値の取得など使い方と実装方法について詳しく説明をしています。ComboBoxは使用頻度が高いコントロールなので、本記事を参考して是非使い方をマスターしておきましょう。...
【WPF】アイコン付きのComboBoxを表示する方法(カスタマイズ)ComboBoxにアイコン付きのプルダウンリストを作成したい方におすすめの記事です。WPFのコンボボックスはXAMLにコードを書けるため、細かいところまで自由自在にカスタマイズができます。今回はComboBoxにアイコンと項目名をペアで表示する方法について紹介をしています。...
【WPF】DataGridの使い方を徹底解説!基本的な操作方法を紹介WPFの「DataGrid」を使って行の追加、ボタンの列を追加、comboboxの列を追加するなど基本的なDataGridの操作方法を紹介しています。DataGridはWPFでアプリケーションを作る時に使う頻度が高いコントロールなので、この記事を参考にして使い方をマスターしておきましょう。...
プログラミングを学習したいなら…

プログラミングスキルを身に付けるなら、プログラミングを効率良く学べる
プログラミングスクール」がオススメです。

特にこんな方にオススメ!!
これからエンジニアを目指したい
プログラミングの専門性を高めたい
プログラミングを学んで副業をしたい
エンジニアに転職して年収をアップさせたい

プログラミングを触ったことがない未経験からでも、プログラミングスクールで学習すれば、エンジニアへ就職・転職することも可能です。

あなたの「行動力」と「やる気」で、あなたの人生を大きく変えるチャンスになることでしょう。

プログラミングスクールに興味がある方は是非チェックしてみてください。

> プログラミングを学ぶ <

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA