15
6

More than 3 years have passed since last update.

わかれば簡単! #PowerApps のTemplateSize=0の手法

Posted at

はじめに

日本のPowerApps makerたちの一部では『TemplateSize:0』という手法が使われているのですが、まだまだあまり知られていないと感じたので、今回簡単にご紹介します。
Power Appsのキャンバスアプリの中でも、ギャラリーコントロールを利用する際のテクニックです。

一番すぐに思いつくのは、NxMのグリッドを作成するようなパターンで、かつ列方向が10を超える場合です。
Power Appsのギャラリーには、WrapCountというプロパティがあり、縦型のギャラリーであれば、横方向に何列カードを配置するかを記述しています。
しかし、この上限が10であるために、表示上の制限が出てくる場合があります。
この制限を緩和する手段として、GalleryのTemplateSizeを0にするというものがありますので、今回紹介します。

PowerApps のスクリーンにおける座標

Power Appsのキャンバスアプリでは、スクリーンの左上にXY座標の原点、(X=0, Y=0)が存在します。
スクリーン上のコントロールやアイコンは、この原点から見て、どの位置にあるのかを、それぞれのXYプロパティによって表現しています。
image.png

ギャラリーコントロールにおける座標

ギャラリーコントロール(以後縦型に限定します)では、ギャラリー内に適当なコントロールを追加すると、横方向に同じ位置に、各行でコントロールが表示されることがわかるかと思います。
また各行にセパレータを入れると何となくわかりますが、各行の天井からの位置もそろっているのが見て取れます。
image.png
このようにキレイに表示されるのは、各行の中で座標の原点を持っていて、それが左上にあるからなんです。
image.png
また、スクリーン側から見ると、各行のコントロールの間は、TemplateHeightのぶんだけ、離れていることもわかります。
image.png

ではTemplateHeightが0になるとどうなるでしょう?
ナイーブには、各行のコントロールが、縦方向に接近していって、最終的に重なるだろうと予想できます。
これがまさにTemplateSize:0のポイントです。

TemplateSizeを0にすると何がおこるか

TemplateHeightをスライダーで調整したデモがこちらです。

予想通り、各行のコントロールが接近していって、同じ高さにそろいました。
ただし、気を付けなければならないのは、Y方向に少しの補正が必要だということです。
各コントロールのYプロパティには、たとえTemplateHEight=0であったとしても以下の補正が必要です。

someControl.Y
配置したいYの値-ThisItem.RowNumber

RowNumberはギャラリーの各アイテムの順番で、1から始まる連番の数字がふられていることを想定しています。
この補正のもとで、各行の原点は一致し、ギャラリーの中がすべてのアイテムに対して同じ座標になります。

これを利用することで、これまでよりも自由なレイアウトができます。
image.png

WrapCount>10

TemplateSize:0を利用すると、WrapCountを10以上に引き上げることができます。


ここでは、スライダーで横方向に配置したいアイテムの数を設定しています。

きっちりとNxMで並べたいような場合には、一般性を失うことなく、各コントロール(RectangleやButton,Labelなど)のX,Yプロパティは以下の式で決定することができます。

control.X
Button2.Width*((ThisItem.RowNumber)-wrapNum*(RoundDown((ThisItem.RowNumber-1)/wrapNum,0))-1)
control.Y
0-ThisItem.RowNumber+control.Height*RoundDown((ThisItem.RowNumber-1)/wrapNum,0)

ここでwrapNumは横方向に配置したいアイテム数です。

このようにして、WrapCount10の制限は緩和可能です。

参考

RowNumberを付与する際には、下記ブログが参考になります。

15
6
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
15
6