SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

急速に進化するUWPアプリのUI
~Windows 10 1809の新コントロール/DataGrid/旧バージョンへのバックポート

UWPアプリ開発の最前線 第9回

1809の新しいUIコントロール

 Windows 10 1809で追加されたコントロールには、次のようなものがあります。

 この中からいくつか紹介していきましょう。

メニューバー

 待ち望んでいたメニューバーが追加されました(少なくとも業務アプリ開発者には吉報でしょう)。次の画像に見えるように、メニュー項目にはアイコンも付けられますし、ショートカットキー(キーボードアクセラレータ)も設定できます(画像の「Save」メニュー)。また、Altキーを押したときに表示されるアクセスキーも設定可能です(画像の「P」/「R」/「O」)。

メニューバーを展開した様子
サンプルアプリのメニューバー

 このメニューバーのXAMLは次のコードのような感じです(「Plain Text Document」メニューと「Save」メニューに関連する部分のみ抜粋)。

メニューバーのXAML
<MenuBar Background="AliceBlue" >
  <MenuBarItem Title="File" AccessKey="F">
    <MenuFlyoutSubItem Text="New" AccessKey="N">
      <MenuFlyoutItem Text="Plain Text Document" AccessKey="P"
                      Command="{x:Bind _menuCommand}"
                      CommandParameter="Plain Text Document" />
      <!-- ……省略…… -->
    </MenuFlyoutSubItem>
    <!-- ……省略…… -->
    <MenuFlyoutItem Text="Save" AccessKey="S" Icon="Save"
                    Command="{x:Bind _menuCommand}"
                    CommandParameter="Save">
      <MenuFlyoutItem.KeyboardAccelerators>
        <KeyboardAccelerator Key="S" Modifiers="Control"/>
      </MenuFlyoutItem.KeyboardAccelerators>
    </MenuFlyoutItem>
    <MenuFlyoutSeparator />
    <!-- ……省略…… -->
  </MenuBarItem>
  <!-- ……省略…… -->
</MenuBar>

ドロップダウン系ボタン3種

 いずれもドロップダウンを表示できるボタンです。各コントロールのFlyoutプロパティにドロップダウンを自由に定義します。

DropDownButton

 単純に、ボタンがクリックされたときにドロップダウンを出すだけのコントロールです。

DropDownButtonのドロップダウンを展開した様子
DropDownButtonをクリックしたところ

SplitButton

 ボタン右側の「v」部分をクリックすると、ドロップダウンが出ます。それ以外の部分をクリックしたときは、普通のボタンです。MS Officeで文字色などを設定するボタンといえばお分かりでしょう。

SplitButtonのドロップダウンを展開した様子
SplitButtonの「v」部分をクリックしたところ

ToggleSplitButton

 上のSplitButtonに似ていますが、ボタン本体の動作がトグルになっています。

ToggleSplitButtonのドロップダウンを展開した様子
ToggleSplitButtonの「v」部分をクリックしたところ

テキストボックス系コントロールのコンテキストメニュー

 1809では、テキストボックス系のコンテキストメニューが刷新されました。次の画像はRichEditBoxコントロールの例です。文字列を選択しただけで、MS Officeのようにミニツールバー(コマンドフライアウト)が出てきます。これには、TextCommandBarFlyoutコントロールが使われています。

RichEditBoxのコマンドフライアウトを折りたたみモードで展開した様子
RichEditBoxで文字列を選択したところ

 このコマンドフライアウトには[…]ボタンがあります。それをクリックするか、あるいは、コマンドフライアウトが出ていない状態で右クリックすると、次の画像のように拡張されたモードのコマンドフライアウトになります。

RichEditBoxのコマンドフライアウトを拡張モードで展開した様子
RichEditBoxで右クリックしたところ

 このコマンドフライアウトはカスタマイズ可能で、ボタンやメニューを追加/削除できます。例えば、次の画像ではボタンを追加しています。

RichEditBoxのコマンドフライアウトに[共有]ボタンを追加した
RichEditBoxのコマンドフライアウトに[共有]ボタンを追加した

 上のようにボタンを追加するには、ページが表示されるときに次のようなコードを記述します。

RichEditBoxのコマンドフライアウトに[共有]ボタンを追加するコード
this.richEdit.Loaded += (s, e)
  => this.richEdit.ContextFlyout.Opening += ContextFlyout_Opening;
this.richEdit.Unloaded += (s, e)
  => this.richEdit.ContextFlyout.Opening -= ContextFlyout_Opening;

void ContextFlyout_Opening(object sender, object e)
{
  var shareCommand = new StandardUICommand(StandardUICommandKind.Share);
  shareCommand.ExecuteRequested += (cmd, args) =>
  {
    // ボタンクリック時の処理を書く
  };
  var shareButton = new AppBarButton { Command = shareCommand, };
  (sender as CommandBarFlyout).PrimaryCommands.Add(shareButton);
}

 上のコードに登場するStandardUICommandクラスは、これも1809で追加されたもので、UIでよく使うコマンドの実装を楽にしてくれます。UIコマンドの種類(ここではStandardUICommandKind.Share=共有)とコマンド実行時の処理を書くだけで、アイコンやツールチップの設定などはしなくて済みます。また、ここではUIコマンドがセットされたボタンをPrimaryCommandsに追加しているので、折りたたんだ小さいツールバーに追加のボタンが表示されます。拡張した下側のコンテキストメニューに表示したいときは、SecondaryCommandsに追加します。

次のページ
DataGridコントロール

関連リンク

この記事は参考になりましたか?

UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11188 2018/11/20 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー