0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Power Apps】ハンバーガーメニューをコンポーネントで作ってみた

Last updated at Posted at 2023-11-16

はじめに

Power Appsでハンバーガーメニューを作る記事はいくつかありますが、コンポーネントに作成した上で実用的な実装まで落とし込んだ記事が無かったので解説します。
最終的なイメージは以下のようになります。

Animation3.gif

私自身、Power Appsで「原神」というゲームの育成素材管理アプリをPower Appsで作成しており、このハンバーガーメニューが非常に役立っています。(Paimon.moeでよくねは禁句)

image-3-1024x574.png

作成手順

コンポーネントの作成

ツリービューより、コンポーネントを作成します。

image-1.png

作成時のコンポーネントサイズはアプリサイズと異なっているのでWidthとHeightを設定します。

image-4.png
image-6.png

Width = App.Width
Height = App.Height

メニューアイコン配置

ヘッダーにあたる四角形とハンバーガーメニューアイコンを画面上部に追加します。

image-9-1024x321.png

ギャラリー作成

次にメニュー本体に用いる「垂直ギャラリー」を配置します。

image-10.png

ギャラリー用データ作成

「Items」プロパティにハンバーガーメニューに表示したいアイコンと表示名のコレクションを入力します。
※screenは一時的にBlank()にしていますが、後の手順でカスタムプロパティのスクリーンを指定します。

image-11-1024x614.png

Table(
    {
        icon: Icon.Home,
        display: "ホーム",
        screen: Blank()
    },
    {
        icon: Icon.AddUser,
        display: "ユーザー追加",
        screen: Blank()
    },
    {
        icon: Icon.AddLibrary,
        display: "アイテム追加",
        screen: Blank()
    },
    {
        icon: Icon.Notebook,
        display: "一覧表示",
        screen: Blank()
    }
)

ギャラリーにデフォルトで入っているものを削除し、いい感じの配置に変更します。
ここでは先ほど追加したItemsに合わせてラベルとアイコンを追加しました。

image-13.png

アイコンはプロパティの「Icon」を「ThisItem.icon」とすることで、Itemsに入力した任意のアイコンを動的に指定することができます。

image-12.png

遷移先画面指定

先ほどBlank()にしていた部分に値を追加していきます。ここにはNavigate関数の引数となる画面情報が必要になります。画面情報はコンポーネントのカスタムプロパティをデータ型を「画面」で作成することで指定できます。

image-14.png

メニューから遷移したい画面分作成します。

image-15.png

ギャラリーのItemsプロパティに戻り、各Itemのscreenの値を追加したカスタムプロパティ値に変更します。

image-16.png

画面遷移処理追加

次に、Itemsのscreenに指定した画面へ遷移する処理を追加します。
ギャラリーのOnSelectに画面遷移を行うNavigate処理を追加します。このとき、遷移先は先ほどギャラリーデータに追加したThisItem.screenを利用することで動的に追加できます。

image.png

Table(
    {
        icon: Icon.Home,
        display: "ホーム",
        screen: 'Header Component'.HomeScreen
    },
    {
        icon: Icon.AddUser,
        display: "ユーザー追加",
        screen: 'Header Component'.AddUserScreen
    },
    {
        icon: Icon.AddLibrary,
        display: "アイテム追加",
        screen: 'Header Component'.AddItemScreen
    },
    {
        icon: Icon.Notebook,
        display: "一覧表示",
        screen: 'Header Component'.ListViewScreen
    }
)

ギャラリーのOnSelectプロパティに直接Navigate()を記載してもよいですが、マウスオーバーした際にアイコンと文字でカーソルが変わってしまいます。

image-18.pngimage-20.png

以下のように透明のボタンを配置することでマウスポインターを一定にすることができます。

アイコン、ラベルの上にボタンを配置
image-22.png
ボタンを透明化
image-23.png

表示/非表示フラグ追加

ハンバーガーメニューアイコンをクリックすることでメニュー部の表示/非表示を切り替える処理を追加します。
出力型でハンバーガーメニュー表示フラグを持つカスタムプロパティを作成します。

image-10.png

アイコンのOnSelectプロパティに表示フラグを持つグローバル変数をSet関数で定義します。

image-1.png

Set(isVisibleHamburgerMenu, !isVisibleHamburgerMenu)

画面遷移後にハンバーガーメニューを自動で閉じたい場合、ギャラリーのOnSelectプロパティに表示フラグをfalseにするコードを追加します。

image-2.png

Navigate(ThisItem.screen);
Set(isVisibleHamburgerMenu, false);

最後に、カスタムプロパティにグローバル変数の値を参照するように指定します。

image-12.png

画面にコンポーネントを追加

次に、作成したコンポーネントを画面側に追加していきます。
コンポーネントは常に最前面に配置してください。上に別のオブジェクトを配置すると機能しなくなります。

image-5.png

遷移先画面情報追加

コンポーネントのカスタムプロパティに実際の画面情報を加えます。
遷移したい画面に合わせてプロパティを設定していきます。この設定が完了すると、アイコンを押下することで各画面に遷移することができます。

image-6.png

image-7.png

image-8.png

表示・非表示切り替え処理追加

表示フラグを持つグローバル変数の値に応じて、コンポーネントの高さを制御することで表示・非表示を切り替えます。
画面に追加したコンポーネントのHeightプロパティを以下のように指定します。

image-13.png

If(
    cmpHambugerMenuHS.IsVisibleHambugerMenu,
    App.Height,
    55 // コンポーネントのヘッダ部と同じ値
)

Animation.gif

ここまでの操作を各画面に行うことで以下のような画面遷移を行うことができるようになります。

Animation2.gif

コンポーネントに対する設定や画面追加後に指定が必要なプロパティが多いですが、ユーザーライクなハンバーガーメニューをPower Appsで作成することができました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?