かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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);