CommandBarを配置する【C#/XAML】

CommandBarはアプリにコマンドボタンを実装するためのコントロールです。ボタンのアイコンもあらかじめ用意されたものを用いることができ、ボタンの配置も自動で行ってくれることから非常に有用なコントロールであり、実際のアプリでもよく用いられています。

開発環境

  • .NET 6.0
  • WinUI 3.0 (Windows App SDK 1.0)

CommandBarとは?

CommandBarとはそのアプリの基本的なコマンドをひとまとめにしたもので、Windows 11のエクスプローラやSnipping Toolなどでも使用されています。

コマンドの少ないシンプルなアプリではCommandBarを使うことで簡単にGUIを作成することができ、またコマンドの多い本格的なアプリでもCommandBarによく使うコマンドだけを表示させることで簡単にそのコマンドにアクセスすることが可能になります。このようにCommandBarはアプリにコマンド操作ボタンをシンプルに組み込むために非常に有用な要素です。

CommandBarには以下のようにICommandBarElementインターフェイスを実装したものが登録可能です。

また、CommandBarの各々の領域は次のように名前が付けられています。

Parts of a command bar
https://docs.microsoft.com/ja-jp/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.commandbar より抜粋
CommandBarとAppBarの違い
CommandBarのほかにAppBarというものも用意されていますが、この2つはどのように違うのでしょうか?
実はWindows 8ではCommandBarではなくAppBarが用いられてきましたが、Windows 8.1からはAppBarを継承して、機能を追加したCommandBarが用いられるようになりました。そのような経緯があるのでAppBarとCommandBarの両方残されていますが、現在ではCommandBarの使用が推奨されています。
ちなみに、CommandBarに配置するボタンはAppBarButtonという名前ですが、これもWindows 8の名残が残っているのです。

CommandBarにコントロールを配置する

PrimaryCommands領域にコントロールを配置する

CommandBarではPrimaryCommandsがコンテントプロパティに設定されているので、プロパティ要素構文を用いて<CommandBar></CommandBar>の間に直接要素を指定することで、PrimaryCommands領域に配置できます。なお、PrimaryCommands領域に配置できるのはICommandBarElementインターフェイスを実装したコントロールに限られます。

<CommandBar>
    <AppBarButton Icon="Add" Label="Add"/>
    <AppBarButton Icon="Edit" Label="Edit"/>
    <AppBarSeparator/>
    <AppBarToggleButton Icon="Like" Label="Like"/>
    <AppBarSeparator/>
    <AppBarButton Icon="Share" Label="Share"/>
</CommandBar>

CommandBarに今回配置した4つのボタンと区切り線が表示されていることが分かります。なお、PrimaryCommands領域に配置したコントロールはウィンドウ幅が狭くなると自動的にSecondaryCommands領域に移動されます。

SecondaryCommands領域にコントロールを配置する

プロパティ要素構文を用いてCommandBarSecondaryCommandsに要素を指定することで、CommandBar右側の「…」で展開されるSecondaryCommands領域に配置することができます。なお、SecondaryCommands領域に配置できるのはICommandBarElementインターフェイスを実装したコントロールに限られます。

<CommandBar>
    <AppBarButton Icon="Add" Label="Add"/>
    <AppBarButton Icon="Edit" Label="Edit"/>
    <AppBarSeparator/>
    <AppBarToggleButton Icon="Like" Label="Like"/>
    <AppBarSeparator/>
    <AppBarButton Icon="Share" Label="Share"/>
    <CommandBar.SecondaryCommands>
        <AppBarButton Icon="Setting" Label="Setting"/>
        <AppBarButton Icon="Help" Label="Help"/>
    </CommandBar.SecondaryCommands>
</CommandBar>

Content領域に配置する

プロパティ要素構文を用いてCommandBarContentに要素を指定することで、Content領域にコントロールを配置できます。なお、Content領域にはICommandBarElementインターフェイスを実装していないものも含めて、任意のコントロールを1つだけ配置可能です。複数のコントロールを配置する場合は、StackPanelなどでレイアウトを自分で設定する必要があります。

以下の例ではContent領域にSliderを配置してみましょう。

<CommandBar VerticalContentAlignment="Center">
    <AppBarButton Icon="Add" Label="Add"/>
    <AppBarButton Icon="Edit" Label="Edit"/>
    <AppBarSeparator/>
    <AppBarToggleButton Icon="Like" Label="Like"/>
    <AppBarSeparator/>
    <AppBarButton Icon="Share" Label="Share"/>
    <CommandBar.SecondaryCommands>
        <AppBarButton Icon="Setting" Label="Setting"/>
        <AppBarButton Icon="Help" Label="Help"/>
    </CommandBar.SecondaryCommands>
    <CommandBar.Content>
        <Slider Width="300"/>
    </CommandBar.Content>
</CommandBar>

CommandBarのデザイン・動作を調整する

IsOpenプロパティ

CommandBarが展開されているかどうかを表します。IsOpenがTrueでCommandBarが展開された状態となり、Falseで閉じられます。

ClosedDisplayModeプロパティ

CommandBarが閉じられた状態での表示方法を指定します。デフォルトは”Compact”ですが、”Minimal”とするとCommandBarが閉じられた状態では「…」のみが表示されるようになります。

IsStickyプロパティ

デフォルトではIsStickyプロパティはFalseに設定され、「…」でCommandBarを展開しても、アプリ内の任意の場所をクリックすると閉じられます。それに対してIsStickyプロパティをTrueに設定すると、「…」でCommandBarを展開した場合はもう一度「…」をクリックしない限りは閉じられません。

DefaultLabelPositionプロパティ

AppBarButtonのラベルの表示位置を指定します。デフォルトでは”Bottom”ですが、”Right”に設定するとアイコンの右側に表示されます。また、”Collapsed”に設定するとラベルは表示されません。

“Bottom”だとアイコンの下にラベルが表示されます。
“Right”に設定するとアイコンの右側に表示されます。

なお、”Bottom”ではCommandBarが閉じられた状態ではラベルが表示されませんが、”Right”に設定すると常にラベルも表示されるようになります。

AppBarButtonのデザイン・動作を調整する

Iconプロパティ

IconプロパティにSymbol列挙型の値を指定することで、あらかじめ定義された以下のようなアイコンを簡単に指定することができます。

https://docs.microsoft.com/ja-jp/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.symbol より抜粋

Labelプロパティ

Labelプロパティに文字列を指定することで、そのボタンに表示する文字を設定できます。ラベルを表示させる位置はCommandBarのDefaultLabelPositionで指定できます。

Clickイベント

ボタンがクリックされたときの処理を表すメソッドをClickイベントに登録させることで、クリックしたときの処理を指定できます。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)