Neutral Scent

App developments & Gadgets

WP7のパノラマコントロールで任意のアイテムをプログラムから選択する

パノラマの表示アイテムをコードから操りたい時、なぜか.SelectedIndexや.SelectedItemプロパティはReadOnlyで設定できず(Pivotは出来るのに...)、一番定番とされているのはPanoramaコントロールのDefaultItemプロパティを使う方法です。確かにこれなら、単純かつ安全でそれなりにうごきます。



panorama.DefaultItem = selectItem;
がっ、Defaultを変更するだけにパノラマのタイトルがずれてかっこ悪い。動きもへったくれも無いそっけない動作になります。
なので、別の方法を探るとこうなります。

panorama.SetValue(Panorama.SelectedItemProperty, selectItem);
panorama.Measure(new Size());
相変わらずアニメーションはしてくれませんが、表示はだいぶマシに。
もうちょい頑張って拡張メソッドにしてみましょう。

public static class PanoramaUtil
{
public static void SelectItem(this Panorama panorama, PanoramaItem selectItem)
{
panorama.SetValue(Panorama.SelectedItemProperty, selectItem);
panorama.Measure(new Size());
}
}
使うときはこんな感じ。

panorama1.SelectItem(item);
まぁ、ちょっと力技ですが、とりあえず動きます。
Panoramaをテンプレートのレベルまで分解していって、ViewStateをうまく操れればもっとスマートにできそうな気がするので誰かお願いします(ぇ。