かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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