NavigationFrameworkで違うアセンブリに含まれるページに移動する

グローバルサミットぐらいに調べてから寝かしてたらすっかり漬かっていたので、とりあえず引っ張りだしてみる。

本当は違うアセンブリ(dll)を動的に読み込んで、そのアセンブリに含まれるページに移動させようと思ったんだけれど、どうも単にアセンブリを読み込んで移動するだけではだめらしい。とりあえず前段として他のアセンブリに移動するためにはこんな風に記述する。


<StackPanel>
  <HyperlinkButton NavigateUri="/DynamicAssembry;component/Page1.xaml" Content="違うアセンブリ"/>
</StackPanel>StackPanel


で、まぁマッピングをしておくとすっきりするかな。

<navigation:Frame x:Name="ContentFrame" Source="/Home">
  <navigation:Frame.UriMapper>
   <uriMapper:UriMapper>
    <uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/>
    <uriMapper:UriMapping Uri="/{assemblyName};component/{path}" MappedUri="/{assemblyName};component/{path}" />
    <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
   </uriMapper:UriMapper>
  </navigation:Frame.UriMapper>
</navigation:Frame>


こんな風になる。

<HyperlinkButton NavigateUri="/DynamicAssembry;Page1.xaml" Content="違うアセンブリ" />


C#とかから遷移する場合もHyperLinkButtonと同じように使える。ページマッピングが定義されている場合にそっちをゆうせんするのも同じ。

DLLを動的に読み込んでって出来るのかな。単なるメソッドのコールは問題ないんだけれどページに移動すると、ページがないとかって怒られるんだよね。XAPにしてから読み込むとうまくいくっぽいから、DLLのマニフェストとかそのあたりだと思うんですけれど。。。

あっ、こっちはえいごだけれど絵つきで分かりやすいかも。
http://www.davidpoll.com/?p=88

この記事へのコメント

この記事へのトラックバック