モダンコントロールのタブ一覧コントロールはいいぞ！


# はじめに

これまでいくつかの記事で紹介してきましたが、モダンコントロールの進化が止まりません。クラシックコントロールの時にはない機能やコントロールも増えており、個人的により簡単に色々な UI/UX のアプリを作れるようになってきていると感じています。

https://qiita.com/Takashi_Masumori/items/ae700eeb59ee54ca6bbc

https://qiita.com/Takashi_Masumori/items/78cb22abab713c004c83

今回は、その一つである、タブ一覧コントロールについて、いくつかの活用例紹介します。
タブ一覧コントロール、個人的にかなりお勧めです。

# メニューをつくる

Microsoft の Reza Dorrani さんが紹介されていたのですが、以下のように使うことで、レスポンシブ (デバイスに合わせて画面サイズを最適化する) なメニューを簡単に作ることが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/789a4af6-2e18-c358-7d59-bdc098faf58c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ab397efc-25a7-8004-184d-a1f1a54e1eef.png)

私は、今まで、こういったメニューを作る際は、コンポーネントとして作っていました。ただ、以下はレスポンシブではなく、レスポンシブかどうかに関わらず、個人的に、初学者の方からすると、少し難易度が高いと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/191d70ac-03e3-12a9-a5e4-3f3a11783679.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/609b8108-fb23-6b71-4912-d71b96027e94.png)

そのため、細かいデザイン要件がなければ、今後は、こちらのタブリストを使っていこうと思っています。

## 作り方

### 画面レイアウトの設定

まず、以下のレイアウトの画面を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9250883c-8cf3-7492-fb57-4095bd9d83be.png)

以下の設定をオフにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/34f74d8e-dde9-40f6-cb47-c8cd18ce391a.png)

`[Width]`プロパティを以下の通り変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/49f2a55b-cab0-5fbc-4e50-7dae9e95c8ee.png)

```
If('Home Screen'.Size = 1,Parent.Width,200)
```

こちらは、以下のような画面サイズのプロパティを利用し、電話サイズの場合空白が出来てしまわないようにするためです。

https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/create-responsive-layout#screen-sizes-and-breakpoints

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a50c953f-4743-d28a-4442-ac5e8d163772.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/000d72dd-2227-9219-3205-241fd86fbd81.png)

次に、モバイルの際、以下のようなメニューの高さにするために、`[AlignInContainer]`プロパティを以下の通り設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/0a4ad23b-98a6-b1ae-d036-bc3d254fc3b7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/cd527455-b075-7d03-88b7-71840c55f663.png)

```
If('Home Screen'.Size=1,AlignInContainer.Start,AlignInContainer.Stretch)
```

`[Height]`プロパティを以下の通り設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/f01ca707-686d-019a-5c75-44cc45ef5271.png)

これにより、モバイルの場合、以下のような高さになり、メニューらしくなりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/8d3c1d0a-5236-3048-b9fb-64e89e6b7844.png)

次に、以下のスペースをなくすため、メイン側のコンテナの最小高さを意味する、`[LayoutMinHeight]`プロパティを変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c040fda1-6220-55dc-ce5a-d7864add1b2a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1d3214e2-9032-bef6-4e88-1322f095d156.png)

### タブ一覧コントロールの設定

モダンコントロールをオンにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9ad190ee-5953-e8c9-a1c8-f1d9deb0439b.png)


以下の通り、タブ一覧コントロールを追加しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1e829a32-de66-b769-8e02-9561533ae501.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/995558f2-6040-5062-9c71-ebd89dc0a41d.png)

以下 2 つの設定を変更し、`[LayoutMinWidth]`も変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/98add41a-19c8-5c42-8e8e-7f5bde988e2d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/3a80a9a8-d4f2-2112-1166-f03bf18df078.png)

次に、タブ一覧コントロールの`[Alignment]`プロパティ、つまり、メニューが横表示なのか縦表示なのかを意味するプロパティを以下の通り変更します。つまり、モバイルの時とそうではないときで表示を切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a8d3c19e-1c74-9558-f28d-4bdee7ea3283.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c11693cb-617c-7146-cca1-7995d0c9149f.png)

```
If('Home Screen'.Size=1,'TabList.Alignment'.Horizontal,'TabList.Alignment'.Vertical)
```

これにより、モバイルの時に横表示になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/92d940aa-1a58-89ff-3fcb-2e7a9a118b56.png)

コンテナのパディングを少し調整します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/34451398-07a7-11ab-5369-018d2f8b2e86.png)

タブ一覧の`[LayoutMinWidth]`プロパティを少し変更します。この辺は見た目の微調整です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/0090393b-135e-86e4-2075-b9e1c8ddf56d.png)

### ナビゲーションの作成

以下のように、App (アプリ) の`[Formulas]`プロパティに以下の式を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c222c6c2-abe8-48cf-dc49-cf8a7fe80f57.png)

```
MenuData = [
    {
        MenuTitle: "Home",
        GoToScreen: 'Home Screen'
    },
    {
        MenuTitle: "Task",
        GoToScreen: 'Task Screen'
    },
    {
        MenuTitle: "Info",
        GoToScreen: 'Information Screen'
    },
     {
        MenuTitle: "Test1",
        GoToScreen: 'Test Screen1'
    },
     {
        MenuTitle: "Test2",
        GoToScreen: 'Test Screen2'
    },
     {
        MenuTitle: "Test3",
        GoToScreen: 'Test Screen3'
    }
];
```

タブ一覧の`[Items]`プロパティを変更し、フィールドを`MenuTitle`に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/8711bc12-b0ec-54a4-692e-36fcac2205d2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/569d1fcc-17e7-8f01-3653-46a2fb8a96c5.png)

タブ一覧の`[OnSelect]`プロパティを以下の通り変更し、画面遷移するようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c90c202f-6315-6001-35dc-e952384cf6bb.png)

```
Navigate(Self.Selected.GoToScreen)
```

次に、`[DefaultSelectedItems]`を以下の通り変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/3fb720f7-951e-1fe4-26c0-fcbdc6ee7596.png)

```
LookUp(MenuData,GoToScreen = App.ActiveScreen)
```

選択されているアイテムが現在のアクティブなスクリーンが選択されていることになります。例えば、`Home Screen`を開いている場合、Home が選択されており、`Task Screen`を開いている場合、Task が選択されております。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5b14d9b2-b32a-a022-065f-ed570b8baf5c.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/88ab17f6-5b01-6dea-f401-b42847eda2c8.png)

最後に、ヘッダーコンテナを追加して以下のように、設定をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/48c7a49c-8d79-1f51-f32e-89e6c72a7633.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/e0b2ed89-7e8a-b14e-b57f-91a71279d598.png)

画面を複製して、`MenuData`で設定したスクリーン名に変更していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a07cc2da-256a-a0c2-149c-2ec40be0e07d.png)

今回の例では、以下のようなスクリーン構成にしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/52e753ce-ce9a-acf6-f27b-465594c1fcd0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d1213b2a-75bd-a310-5e9d-fb619c96de67.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/2b167cf3-e66e-8266-3c80-1892c5a8adc3.png)

実行してみます。ページが切り替わることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c0ba2d92-f64f-1c98-8f37-a0b6dd8a996d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/18070984-d3e5-d070-3351-76394b76e5f7.png)

# 入力項目を分割する

以前、こちらの記事のようなアプリを紹介しました。モダンコントロールのタブ一覧コントロールを使うことで、こちらの実装がより簡単になったと思うのでアプローチを紹介します。

https://qiita.com/Takashi_Masumori/items/0f6c7e60787561d9a22c

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d21b4698-42a1-433a-f7b7-d5581a13d264.png)

## アプローチ

まず、モダンコントロールをオンにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/62dd504b-95eb-e680-f048-853822eb7f24.png)

今回は、以下のテンプレートの SharePoint リストを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/55f3e6d7-e093-82d1-8450-af0d8b70a942.png)

そして、以下のように、タブ一覧、フォーム、ボタン等を配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c6f76550-0ff8-2a0e-d95b-3093b1baf1f2.png)

そして、フォームの DataCard の`[Visible]`プロパティを以下のようにタブ一覧で選択した項目によって切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a9f848f3-051b-ae61-e6a9-c8de66a702a5.png)

```
If(TabList1.Selected.Value="申請概要",true,false)
```

もっとシンプルに以下のように書いてもいいですかね。

```
TabList1.Selected.Value="申請概要"
```

他のDataCardに対して同様の処理を入れていきます。
例えば、以下のように、"出張の開始日" DataCard は、タブ一覧で"出張情報"が選択された際に、表示するようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/8beb2000-a1f4-6e2b-62c4-5b21a9222f5b.png)

```
If(TabList1.Selected.Value="出張情報",true,false)
```

最終的にこんな感じで入力項目がタブで切り替わるアプリが簡単に作れました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d34b456c-12c1-b73c-54bd-0a1fa66bdda2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/28dd79ae-3b69-2e20-9903-ec770d43cb1f.png)

# ギャラリーのデータをフィルターする

タブ一覧を使ってギャラリーのデータをフィルターすることもできますのでその方法を紹介します。

## アプローチ

まず、以下のようにデータソースからアプリを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ce8e1407-0135-63ce-35d4-e64c61791d4a.png)

モダンコントロールをオンにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/62dd504b-95eb-e680-f048-853822eb7f24.png)

以下の個所にタブ一覧を配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6a0776ef-ebc3-8d4d-ca4f-919813fd1ccb.png)

フォーム側の以下の式をコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/97450b58-a898-7222-eae1-db0fdf17df44.png)

こんな感じになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/61920148-b6a8-2897-f3fd-bb8cc6d06b69.png)

ギャラリーの'[Items]'プロパティを以下のように少し変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/632b7274-b3fd-8670-6015-42716bb79575.png)

以下のように、タブで選択をしたステータスでフィルターされるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/85e93b82-97bf-3d97-b2ff-e8cf07fdecbb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/fbe3d2da-92bb-334e-e726-3106ff40b578.png)

# まとめ

今回は、モダンコントロールのタブ一覧コントロールを使って、レスポンシブなメニューを作る方法、入力項目を分割する方法、ギャラリーのデータをフィルターする方法を紹介しました。個人的に、今まで似たようなことをやろうとした際よりかなり簡単になったと感じてますし、かなり使い勝手がいいと思うので、是非使ってもらえたらと思いますし、その際の参考になれば幸いです。