ダウンロード サンプルファイル (191.8 KB)
HyperlinkButtonコントロールによるナビゲーション
次にフレームの内容をほかのページに変更し、フレームの内容をほかのページに切り替えてみましょう。
ナビゲーションボタンによるナビゲーション
HyperlinkButtonコントロールを利用して画面の切替(ナビゲーション)を行うためには、NavigateUriに移動先のUriか後述するマッピング名を指定し、ユーザーがリンクをクリックすることで画面の切り替えを行います。
リスト1の「メニューパネル」とある部分をリスト4のように変更してみましょう。
<!-- メニューパネル -->
<Border Margin="5,5,5,5" BorderThickness="1" BorderBrush="Black">
<StackPanel MinWidth="75" MinHeight="300">
<HyperlinkButton Content="トップ" NavigateUri="/Views/TopPage.xaml" />
<HyperlinkButton Content="概要" NavigateUri="/Views/AboutPage.xaml" />
<HyperlinkButton Content="飲み物" NavigateUri="/Views/DrinkPage.xaml" /> <HyperlinkButton Content="コーヒー" NavigateUri="/Views/DrinkPage.xaml?name=cafee" />
<HyperlinkButton Content="二郎" NavigateUri="/Views/DrinkPage.xaml?name=jiro" />
</StackPanel>
</Border>
HyperlinkButtonコントロールのNavigateUriプロパティーに遷移先ページのUriを指定します。併せてTargetNameプロパティーを指定することで、遷移対象のフレームを指定してページを移動することができます。
ほかのページにパラメーターを受け渡したい場合は、HTTPのGETリクエストと同じように?と&を使うことでほかのページにパラメーターを渡すことができます。受け渡したパラメーターは、各ページのNavigateContextプロパティーから取得することができます(リスト5)。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (NavigationContext.QueryString.ContainsKey("item"))
{
MessageBox.Show(NavigationContext.QueryString["item"]);
}
}
図11はリスト4の実行結果です。
左側のリンクをクリックすることでフレーム部分のコンテンツが切り替わっていることが分かると思います。
ディープリンクとブラウザーの履歴
ここで注目したいのは概要ボタンやトップボタンをクリックしたときのUriです。
たとえばリスト4のHyperlinkButtonトップページへリンクした場合は次のようなUriになります。
http://localhost:1095/CodezineNavigationTestPage.aspx#/Views/TopPage.xaml
同様に概要ページへリンクした場合は次のようなUriになります。
http://localhost:1095/CodezineNavigationTestPage.aspx#/Views/AboutPage.xaml
Uriを確認すると分かりますが、ページへのリンクは「#リンク名」で各ページへ直接アクセス可能なディープリンクになっています。ディープリンクでUriを構築しているため、各ページをブックマークしたり、ほかのWebページから各ページに直接移動したりすることができます。
またHyperlinkButtonをクリックしたタイミングで、Webブラウザーの履歴が作成されていることにも気がつくでしょう(図12)。

各ページへのディープリンクが作成されることで、もう一つうれしいことがあります。それは、ページのUriに「Drink」や「Jiro」といったカテゴリーや商品名を埋め込むことで、SEOに対する効果を見込むことができるということです。これは、後述するページマッピングを使うことでさらに効果が高くなります。
外部サイトへのナビゲーション
外部サイトのURIを指定すると外部サイトに対してもナビゲーションを行うことが可能ですが、Silverlightのフレーム内に外部サイトを表示することはできません。外部サイトへリンクする場合はTargetNameプロパティーで、SilverlightをホストしているHTMLのフレームを指定するか、_blankなどで新しいウインドウを開いてあげる必要があります。(リスト6)
<HyperlinkButton Content="WINGSプロジェクト" NavigateUri="http://www.wings.msn.to" TargetName="_blank" /> <HyperlinkButton Content="CodeZine" NavigateUri="http://codezine.jp" TargetName="_self" />
ここで存在しないHTMLのフレームタグを指定したり、TagetNameが指定されていない場合はArgumentExceptionの例外が発生します。Webブラーザーのエラー通知を有効にしている場合、図13のエラーが表示されます。
外部サイトにナビゲートする場合はもう一つ注意すべき設定があります。それは、Silverlightの起動パラメータであるenableNavigationオプションです。
enableNavigationオプションはall(外部へのナビゲーションを許す;既定)とnone(許さない)を設定できますが、noneの状態でリスト5のリンクをクリックした場合、図14のエラー画面が表示されます。また、noneを指定した場合、ブラウザーの履歴やディープリンクも作成されませんので注意してください。
この記事は参考になりましたか?
- Silverlight 3徹底入門連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア



