!!!Sliverlight 画面遷移 [Sliverlight][VisualStudio][C#] *http://code.msdn.microsoft.com/10-C-Silverlight-b4de09ed *Silverlight のようなプラグインを使って Web ページに組み込まれたアプリケーションは、その状態に関わらず URL が変わりません *Silverlight では、ナビゲーション フレームワークという仕組みにより、アプリケーションに配置した複数のページに個別の URL (より広い意味での URI) を与え、ブラウザーの「戻る」「進む」ボタンで切り替えたり、ブックマークが使えるようになります !!!ナビゲーション フレームワークを使う *プロジェクトを右クリックして [参照の追加] を選び、[参照の追加] ダイアログ ボックスの [.NET] タブから「System.Windows.Controls.Navigation」を選んで、[OK] ボタン !!手順 !ページフォルダの作成 *ナビゲーションは、Frame コントロールと Page コントロールを組み合わせて実装 *プロジェクトを右クリックして [追加] - [新しいフォルダー] を選び、「Views」という名前のフォルダーを追加 *このフォルダーに、新しいページを作成していく !ページの作成 *Views フォルダーを右クリックして [追加] - [新しい項目] を選び、[Silverlight ページ] を選んで、という名前の新しいページを作成 !ハイパーリンクボタンの設置 *ハイパーリンクボタンを設置し、追加したページへのURIを指定する !ページを表示する、Frameの設置 !実行 *この状態で、リンクをクリックすると、Frameにページが読み込まれる !URIマッピング *URIの指定が長くなるような場合、簡潔な表記を割り当てられる : !URIマッピングによりパラメータを渡す *URI マッピングでは、単純に文字列を置き換えるだけでなく、パラメーターを渡すこともできます ::パラメータを渡す *Uri プロパティとして「/」を指定した後に「{}」で囲んだ引数を、マッピング先の MappedUri に渡せます : *これは「/」の直後に渡されたパラメーターを「/Views/InfoPage.xaml?arg=」の後ろに追加してナビゲーションするという意味です ::パラメータを受け取る *OnNavigateTo メソッドを次のように記述 protected override void OnNavigatedTo(NavigationEventArgs e) { if (NavigationContext.QueryString.ContainsKey("arg")) { textInfo.Text = "Information: " + NavigationContext.QueryString["arg"]; } else { textInfo.Text = "Information: (empty)"; } } !!!ChildWindowコントロール *http://www.atmarkit.co.jp/fdotnet/chushin/silverlight3develop_01/silverlight3develop_01_03.html *呼び出し元となる親ウィンドウの上に表示される子ウィンドウ *ChildWindowコントロールが親ウィンドウの上に表示される場合、親ウィンドウはブロックされ、ChildWindowコントロールは親ウィンドウを操作することができないモーダルなウィンドウとして表示 !!手順 !ChildWindowを追加 *フォルダーを右クリックして [追加] - [新しい項目] を選び、[Silverlight 子ウィンドウ] を選択 *ChildWindowコントロールはファイルそのものがChildWindowコントロールとして定義されています(通常Silverlightで画面を定義する場合はUserControlコントロールとして定義されます) !呼び出す ChildWindow1 childWindow = new ChildWindow1(); childWindow.Show(); !!!ブラウザーウインドウにSilverlightを表示 *HtmlPage.Window.Navigateを使う *コードによりページを遷移するには、Webブラウザのwindowオブジェクトを示すHtmlWindowクラス(System.Windows.Browser名前空間)のオブジェクトを取得し、そのNavigateメソッドを使用する !!手順 !../index/index.htmlへ移動 Uri linkUri = new Uri("../index/index.html", UriKind.Relative); HtmlPage.Window.Navigate(linkUri, "_self"); !Googleを別ウィンドウで開く Uri linkUri = new Uri("http://google.co.jp/"); HtmlPage.Window.Navigate(linkUri, "_blank"); !!通信方法 *http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/e6ce43f5-e233-4a81-83fc-4ec59455bf91 !System.Windows.Browser名前空間のクラスを利用して、親(opener)側のSilverlightに定義されたメソッドを小画面のSilverlightからHTML(Javascript)経由で動作 *[JavaScript により Silverlight をスクリプト可能にする|http://msdn.microsoft.com/ja-jp/library/cc645085(v=vs.95).aspx] ::Openerの取得 HtmlPage.Window.GetProperty("opener"); !ローカルメッセージ通信を利用 *クライアントにダウンロードされたSilverlightは、System.Windows.Messaging名前空間のクラスを利用して[メッセージのやり取りを行うことができます|http://msdn.microsoft.com/ja-jp/library/dd833063(v=vs.95).aspx] *http://msdn.microsoft.com/ja-jp/library/dd833063(v=vs.95).aspx