==[[Sliverlight 画面遷移]]==
[[Sliverlight]] | [[VisualStudio]] | [[C Sharp]] |
*http://code.msdn.microsoft.com/10-C-[[Silverlight]]-b4de09ed*[[Silverlight ]] のようなプラグインを使って Web ページに組み込まれたアプリケーションは、その状態に関わらず URL が変わりません*[[Silverlight ]] では、ナビゲーション フレームワークという仕組みにより、アプリケーションに配置した複数のページに個別の URL (より広い意味での URI) を与え、ブラウザーの「戻る」「進む」ボタンで切り替えたり、ブックマークが使えるようになります
==ナビゲーション フレームワークを使う==
*プロジェクトを右クリックして [参照の追加] を選び、[参照の追加] ダイアログ ボックスの [.NET] タブから「System.Windows.Controls.Navigation」を選んで、[OK] ボタン
====ページの作成====
*Views フォルダーを右クリックして [追加] - [新しい項目] を選び、[Silverlight ページ] を選んで、という名前の新しいページを作成
====ハイパーリンクボタンの設置ハイパー[[リンク]]ボタンの設置====*ハイパーリンクボタンを設置し、追加したページへのURIを指定するハイパー[[リンク]]ボタンを設置し、追加したページへのURIを指定する <HyperlinkButton Content="Test" Name="hyperlinkButton1" NavigateUriNa[[vi]]gateUri="/Views/Test.xaml" />
====ページを表示する、Frameの設置====
<navigationna[[vi]]gation:Frame />
====実行====
*この状態で、リンクをクリックすると、Frameにページが読み込まれるこの状態で、[[リンク]]をクリックすると、Frameにページが読み込まれる====URIマッピングU[[R]]Iマッピング====*URIの指定が長くなるような場合、簡潔な表記を割り当てられるU[[R]]Iの指定が長くなるような場合、簡潔な表記を割り当てられる <UserControl.Resources[[R]]esources>
<uriMapper:UriMapper x:Key="uriMapper">
<uriMapper:UriMapping Uri="" MappedUri="/Views/HomePage.xaml" />
<uriMapper:UriMapping Uri="About" MappedUri="/Views/AboutPage.xaml" />
</uriMapper:UriMapper>
</UserControl.Resources[[R]]esources>
<Grid x:Name="LayoutRootLayout[[R]]oot">
:
<StackPanel Grid.Row[[R]]ow="0" Orientation="Horizontal" Background="LightCyan"> <HyperlinkButton Content="Home" NavigateUriNa[[vi]]gateUri="Home" /> <HyperlinkButton Content="Info" NavigateUriNa[[vi]]gateUri="Info" /> <HyperlinkButton Content="About" NavigateUriNa[[vi]]gateUri="About" />
</StackPanel>
<navigationna[[vi]]gation:Frame Grid.Row="1" Background="LightYellow" UriMapper="{StaticResource Static[[R]]esource uriMapper}"/>
</Grid>
====URIマッピングによりパラメータを渡すU[[R]]Iマッピングによりパラメータを渡す====*URI U[[R]]I マッピングでは、単純に文字列を置き換えるだけでなく、パラメーターを渡すこともできます
=====パラメータを渡す=====
*Uri プロパティとして「/」を指定した後に「{}」で囲んだ引数を、マッピング先の MappedUri に渡せます
*これは「/」の直後に渡されたパラメーターを「/Views/InfoPage.xaml?arg=」の後ろに追加してナビゲーションするという意味です
=====パラメータを受け取る=====
*OnNavigateTo OnNa[[vi]]gateTo メソッドを次のように記述 protected override void OnNavigatedToOnNa[[vi]]gatedTo(NavigationEventArgs Na[[vi]]gationEventArgs e)
{
if (NavigationContextNa[[vi]]gationContext.QueryString.ContainsKey("arg"))
{
textInfo.Text = "Information: " + NavigationContext.QueryString["arg"];
====ChildWindowを追加====
*フォルダーを右クリックして [追加] - [新しい項目] を選び、[Silverlight 子ウィンドウ] を選択
*ChildWindowコントロールはファイルそのものがChildWindowコントロールとして定義されています(通常Silverlightで画面を定義する場合はUserControlコントロールとして定義されます通常[[Silverlight]]で画面を定義する場合はUserControlコントロールとして定義されます)
====呼び出す====
ChildWindow1 childWindow = new ChildWindow1();
childWindow.Show();
==ブラウザーウインドウにSilverlightを表示ブラウザーウインドウに[[Silverlight]]を表示==*HtmlPage.Window.Navigateを使うNa[[vi]]gateを使う*コードによりページを遷移するには、Webブラウザのwindowオブジェクトを示すHtmlWindowクラス(System.[[Windows]].Browser名前空間)のオブジェクトを取得し、そのNavigateメソッドを使用する
===手順===
====../index/index.htmlへ移動====
Uri linkUri = new Uri("../index/index.html", UriKind.Relative[[R]]elative); HtmlPage.Window.NavigateNa[[vi]]gate(linkUri, "_self");====Googleを別ウィンドウで開く[[Google]]を別ウィンドウで開く====
Uri linkUri = new Uri("http://google.co.jp/");
HtmlPage.Window.NavigateNa[[vi]]gate(linkUri, "_blank");
===通信方法===
*http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/e6ce43f5-e233-4a81-83fc-4ec59455bf91
====System.Windows.Browser名前空間のクラスを利用して、親(opener)側のSilverlightに定義されたメソッドを小画面のSilverlightからHTML側の[[Silverlight]]に定義されたメソッドを小画面の[[Silverlight]]からHTML(Javascript)経由で動作====
*[http://msdn.microsoft.com/ja-jp/library/cc645085(v=vs.95).aspx JavaScript により Silverlight をスクリプト可能にする]
=====Openerの取得=====