【Power Apps】モダンコントロールを知る頃

# はじめに
Power Appsを二年近く触ってない間にモダンコントロールがメインになっていて、割と使い勝手がいい気がするので個人的に使い方などをまとめていこうかと。
使ったコントロールを随時更新していきたいですが続くかどうか・・・

# コントロール
## コンテナー
### 使い方
画面レイアウトでいい感じに画面のテンプレートを作ってくれる項目が増えていますが、これも裏ではコンテナーの組み合わせで作られています。


一番要素の多いサイドバーだとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/9f9fd45f-ae6e-41cd-98de-1608200ecc23.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/291f9abd-30fd-4624-be6a-b1f0996ab796.png)

画面全体の「ScreenContainer」の中にヘッダ用コンテナとボトム用コンテナが入れ子になっています。
例として、フッターを追加するとScreenContainerの下にコンテナを追加する操作になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/c0739e47-be99-42eb-9904-6544a10b2267.png)

追加直後はバカでかいコンテナが自動で設定されます。サイズ調整方法は後述。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/39aec39e-7db2-496f-ae7b-a1cdfc313876.png)

コンテナを入れ子にするのと同様に、コンテナ内に別のコントロールを入れる場合も似たような操作をすればOKです。
ヘッダに何も考えずテキストとボタンを配置したらこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/c2a7adda-e07a-4d86-bccf-af591eef154c.png)

### レイアウト調整
コンテナそのもの、コンテナ内の要素含めてBootstrapのGridシステムのようにアプリ内の比率で高さや幅を自動調整できます。
例として、先ほど追加したバカでかいフッターの高さを調整します。
フッター用コンテナのプロパティで「最小幅」や高さの自動調整ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/d65fee13-b363-4c99-9a0e-452448da0c8f.png)

意味わからない日本語ですが、「部分を塗りつぶす」が所謂Gridシステム的な指定方法です。
追加直後である上のスクショだと、画面で高さ自動調整になっている要素のなかでの1/2をこのコンテナが占有する設定です。
※分母にあたる部分は設定値に応じて勝手に合計値が入力されます。1:11にしたい場合はもう一方の設定で11を入れる必要があります。

ボトム用コンテナを大きくしてフッターを小さくする場合このような感じ。
これで11:1の比率でボトムとフッターが設定されます。
■ボトム側
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/719c7269-93dd-4a89-a744-cdd8661fdb3d.png)
■フッター側
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/396470a5-b858-4968-ab4f-1d0c4570ff0b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/a63530bd-5612-4068-ad2d-14323e352ae5.png)

ちなみに、何も設定していないヘッダー用コンテナは高さの自動調整がオフになっています。
オフにしているとこの設定の分母に影響されず、高さが一定のままになります。

水平コンテナに関しても同様です。
幅の自動調整を有効にして、テキストを8、ボタンを1に設定するとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/b05bd9d8-9946-4f3f-8761-e31a618fbb30.png)


## タブリスト
基本的にラジオボタンの代わりに使うことが多くなりそうですが、画面遷移用のUIとしていい感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/cb97918a-c595-471b-9466-fafece5da091.png)


### 画面遷移
まず、タブリストに表示させる要素を変数として定義します。
画面遷移させる場合アプリ全体で利用するので、App.Formulasで定義します。
※Screenに指定した値は後ほど追加する画面名と一致する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/8122b1a4-e150-44d4-9848-f7b344fce89e.png)

```
TabListItems = [
    {
        Name: "ホーム",
        Screen: HomeScreen
    },
    {
        Name: "案件一覧",
        Screen: ProjectScreen
    },
    {
        Name: "メモ",
        Screen: MemoScreen
    },
    {
        Name: "ユーザー",
        Screen: UserListScreen
    }
];
```

タブリストのItemsを定義した変数に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/da3ecd56-1692-47cc-9591-7def17077ab0.png)

表示されるフィールドをNameに指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/62b431f6-3ebd-4121-8333-9ce24c805a57.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/58e812b8-c568-45a7-bb63-3fe996c0ba7d.png)


OnSelectに画面遷移関数であるNavigateを指定します。
自分自身が選択されている要素のScreenプロパティを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/9a45d4ba-cd9e-43ea-9644-cd9b03b02838.png)

規定値を指定するDefaultSelectedItemsに現在いる画面のアイテムを指定します。
これを設定しないと遷移先でも別のタブが選ばれたままになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/2f10e248-48f7-49bc-ba41-82d33e64d4a1.png)

これを他の画面にもコピーで配置するとタブリストで画面遷移できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/b9dab5b6-3bc5-44da-a517-787f3c53dbc9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/de506672-8c0b-4a06-bd99-c4f06c7146dc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551355/1ab67e77-e8cb-4c55-ad54-f31ef57c193d.png)