【Blen道】パネルを知る

#windev_jp #wpdev_jp

Windows Phone の Update 3 でテンションが上がっている高橋です。

Blend を使いながら、ユーザー視点のUXを目指すBlen道。今回はパネルです。あれ?前もやったっけ?

image

前回ふれたとおり、実は画面に配置するものは2種類だけでコントロールとパネルしかありません。

ではこのパネルとは一体何か? パネルとは「他のオブジェクトを支援するための機能を持ったオブジェクト」です。たぶん。その支援機能とはげんざいのところは3種類。

  • 他のオブジェクトの配置を管理する:Grid, Canvas, StackPanel, WrapPanel など
  • 他のオブジェクトを画面に収める:ScrollViewer, ViewBox など
  • 他のオブジェクトの装飾をする:Border など

配置型パネル

自身の下にオブジェクトを置いて配置を管理するため、子要素を複数置ける=まとめることができるパネルです。ですので配置は関係なしにグループ化のために使われることがあります。

  子要素の配置方法 子要素の重なり 動的な子要素の追加 主な用途
Grid 上下左右の相対位置で管理 image ある Gridで 回避 面倒 汎用、フレームを切って配置するなど解像度対応しやすい。 縦横にグリッドを切って配置もできる。 コンテンツのセンタリングができるのがほぼGridのみなのでそのために使うケースも多い。 ただし、描画時のコストが高く、負荷がかかるためあまりネスとして配置しないようにする必要がある。
Canvas X,Y の絶対座標で管理 image ある 必要 要座標 管理 限定的。など。 解像度に対する対応がほとんどないので固定サイズの画像として扱う。 ViewBox の中に配置することで画像を維持しながらサイズ対応するのが、よく使われる方法。
 
  子要素の配置方法 子要素の重なり 動的な子要素の追加 主な用途
StackPanel 横、縦方向に並べる image ない よく使う に。 データ表示はこれよりもListを使う。 もしくは、単体で使われるケースよりもListなどのテンプレート内で使用される。
WrapGrid 横、縦方向に並べ、表示域を超えたら改行する image ない よく使う 複数のアイテムを表示する際に使う。 が、これ単体で使う場合と、リストコントロールの中で使われるケースも多い。

1画面集約型パネル

表示対象が増えれば画面からはみ出してしまうわけですが、それを画面に収めるのがこのタイプのパネル。必ず子要素をすべて表示できるようになっています。

ScrollViewer:拡大縮小はせずに画面のスクロールではみ出して部分を表示

image

ViewBox:縦横比を維持しながら縮小して画面内に表示する

image

装飾型パネル

今のところは Border だけ。

枠の表示などはほかのコントロールでもできそうだが、各辺ごとに太さを変えたり、角丸のサイズも4か所個別に指定できるなど細かい設定ができる。

imageimage

左の図形は枠の太さを4ペンとも変えた例。右は角丸の大きさを4角それぞれ個別に指定したもの。

グループ化としてのパネル

グループ化の際はその配置はあまり変えたくないケースがほとんど。そのため通常は配置に影響が少ないGrid を使ってグループ化することが多い。

グループ化の目的はまとめて管理すること。

  • 複数のオブジェクトをまとめて表示/非表示切り替え
  • 複数のオブジェクトをまとめてアニメーションさせる

image

また、オブジェクトのコントロール化をする場合、対象オブジェクトは1つでないといけないため、グループ化を行う。