locked
Silverlight CodeBehindのイベントでページ遷移したい RRS feed

  • 質問

  • Silverlight5, C#, VisualStudio2010

    こんにちは。

    上記環境にて「Silverlight ナビゲーションアプリケーション」プロジェクトを使用して、ある画面を構築しています。

    MainPage.xamlのContentFrameはHome.xamlを呼び出します(新規作成した状態のまま)。

    Home.xamlを1:3に分け、右側をContentFrame2とします。

    <navigation:Frame x:Name="ContentFame2" Style="{StaticResource ContentFrameStyle}" >
                        <navigation:Frame.UriMapper>
                            <uriMapper:UriMapper>
                                <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
                            </uriMapper:UriMapper>
                        </navigation:Frame.UriMapper>
    </navigation:Frame>

    左側はツリービューでページ遷移を行う為のツリービューを作成しています。

    このソリューションに、Page1.xaml,Page2.xaml,Page3.xamlを追加します。

    左側のツリービューにHyperLinkBtnを設置し、それぞれPage1.xaml、Page2.xamlへ移動します。

    HyperLinkBtnを使用したページ遷移は問題なく実装できました。

    そして、Page2.xaml内にボタンを追加します。

    Page2.xamlのボタンクリックイベントでどの様にしたら画面遷移が実現できるでしょうか?

    色々ネットで探して試しているのですが、実現出来ずにいます。 

    Page2.xamlに作成した下記メソッドを実行しても画面上何も変化がありません。エラーも表示されません。

    Private void btn1_Click(object sender, RoutedEventArgs e)

    {

    Home home = new Home();

    //Home.xamlにあるContentFrame2に移動したいので下記の様に指定。

    home.ContentFrame2.Navigate(new Uri("/Page3.xaml", UriKind.Relative));

    }

    何か間違い等がありましたら、ご指摘ください。

    別のアプローチ方法等ありましたら、ご教示ください。

    以上、よろしくお願いします

    2014年8月14日 5:50

回答

  • おなじContentFrame2内での遷移ですよね。
    PageのNavigationServiceで指定したUriに移動ができます。

    //Page2.xamlのボタンクリックイベント
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if (this.NavigationService != null)
        {
            Uri uri = new Uri("/Page1", UriKind.Relative);
            this.NavigationService.Navigate(uri);
        }
    }
    新しいHomeのインスタンスを作ってNavigateしても新しいContentFrame2と表示中のContentFrame2は別のインスタンスなので、移動は発生しません。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2014年8月14日 6:53
    • 回答としてマーク fuum 2014年8月14日 7:00
    2014年8月14日 6:50

すべての返信

  • おなじContentFrame2内での遷移ですよね。
    PageのNavigationServiceで指定したUriに移動ができます。

    //Page2.xamlのボタンクリックイベント
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if (this.NavigationService != null)
        {
            Uri uri = new Uri("/Page1", UriKind.Relative);
            this.NavigationService.Navigate(uri);
        }
    }
    新しいHomeのインスタンスを作ってNavigateしても新しいContentFrame2と表示中のContentFrame2は別のインスタンスなので、移動は発生しません。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2014年8月14日 6:53
    • 回答としてマーク fuum 2014年8月14日 7:00
    2014年8月14日 6:50
  • 新しいHomeのインスタンスを作ってNavigateしても新しいContentFrame2と表示中のContentFrame2は別のインスタンスなので、移動は発生しません。



      ご回答ありがとうございます。

      ContentFrame2を指定してNavigateしなければいけないと思いこんでいました。

      その為、素人考えですが、ContentFrame2を呼び出すためにHomeのインスタンスを作ったりして…。 

      同じContentFrame2の中ですから、単純にNavigationServiceを使用してあげれば良いのですね!

      やりたかった事が実現できました!ありがとうございました!

    2014年8月14日 7:05