Silverlight2では、画面遷移を直接的にサポートしてたりはしない。
画面をまるっと変えるためには、2通り考えられます。
- 通常のWebアプリの画面遷移をする。
(別のSilverlightApplicationに切り替える時とかに使う) - SilverlightのPage内の一部を別UserControlに切り替える。
(同一、SilverlightApplication内での擬似的な画面切替)
とりあえず、ここでは2について書いてみる。
まず、画面を切り替える部分を何かホストするコントロールを置く。
こういう部分には、多分飾りっけとかいらないので、コンテンツを表示するためだけの機能を持つContentControlを置いておくといい。
<ContentControl x:Name="body"
Margin="5"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch" />
個人的には、マージンをちょっと入れてHorizontalContentAlignmentとVerticalContentAlignmentをStretchにしておくのがいいと思う。
こうすることで、周りとの隙間が程よくあいて、ContentControl内いっぱいにページが表示されるようになる。
そして、プログラム内では画面切替時に以下のようなコードを書くことで画面が切り替わる。
body.Content = new 新しい画面のUserControl();
ContentControlが置いてあるページのクラス内では、普通にbody変数でアクセスできるけど、それ以外のページではどうすればいいか?ということになると思う。bodyの取得方法は色々あるけれど、グローバルにアクセスするなら以下のようなコードになる。
// ApplicationのRootVisual(表示されているアプリケーション本体)を取得
UserControl page = (UserControl)Application.Current.RootVisual;
// その中のbodyという名前のついている部分を取得
var body = (ContentControl)page.FindName("body");
こういうコードをラップして簡単に使えるようなメソッドとしておけばきっと大丈夫だろう。
後は、1つのSilverlightApplicationに何個くらいまでPageを置くのが現実的なんだろう…ということになる。
いっぱい入れすぎると初回の表示の時にえらい時間がかかってしまうものになる。これはちょっと嫌な感じだ。
悩ましい。