かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

Navigation Frameworkで、別アセンブリにあるページに遷移するときのURIの書き方

いつだったか、悩んでいてやり方がわからなかったけど、今日やり方見つけたのでメモです。
SilverlightClassLibrary1という名前のクラスライブラリにあるPage1.xamlへ遷移するときのURIは以下のような感じで指定するといけます。

var uri = new Uri("/SilverlightClassLibrary1;component/Page1.xaml", UriKind.Relative);
f.Navigate(uri);

形式としては

/アセンブリ名;component/パス

という形になります。

毎回毎回/アセンブリ名;component/....と指定するのはめんどくさいのでUriMapperあたりにエイリアスをつけておくとらくだと思います。

例:/SL1/****というURIを/SilverlightClassLibrary1;component/****に紐付ける場合

<my:Frame x:Name="f">
    <my:Frame.UriMapper>
        <uriMapper:UriMapper>
            <uriMapper:UriMapping Uri="/SL1/{path}" MappedUri="/SilverlightClassLibrary1;component/{path}" />
        </uriMapper:UriMapper>
    </my:Frame.UriMapper>
</my:Frame>

こうしておくと、ナビゲーションのときに指定するURIは、シンプルになる。

var uri = new Uri("/SL1/Page1.xaml", UriKind.Relative);
f.Navigate(uri);