2017-08-23 12 views
0

私のMainPage.xamlではSplitViewを作成しました。私はSplitViewペインを使って自分のページ間を移動しています。新しいページを開く代わりに、SplitViewのコンテンツにページの枠を埋めます。フレームによるUWPナビゲーション

私はProjectsPageというアクティブフレームを持っています。このフレームには、各プロジェクトのユーザーコントロールがあります。今度はユーザーコントロールをクリックし、ProjectDetailsPageという新しいフレーム/ページをロードします。

私は、ユーザーコントロールから移動することはできません。

ContentFrame.Navigate(typeof(ProjectDetailsPage), project); 

どのように私はこの新しいフレームを読み込むことができますか?

答えて

0

あなたが直面している問題は、UserControlsFramesではなく、1つとして使用されるように作られていないということです。最高の部分は、ナビゲーションはFramesで行われます。

あなたの場合のシナリオでは、単純に言えば、ユーザーコントロールにボタンがあります。クリックすると、フレームを別のpageにナビゲートしたいと考えています。

  1. あなたはフレームを見つけ、それをナビゲートするためにそれを使用それまではvisualtreeを行く:これはあなたのクエリの場合、あなたはそれで行くことができる3つの方法があります。私はそのようなアプローチについてだけ読んだだけで、私はそれを試していない。私は個人的にはvisualtreeに行くのが好きではありません。
  2. MainPageまたはProjectsPageにナビゲートフレームのスタティック/シングルトンインスタンスを作成し、usercontrolから呼び出すだけで、ナビゲーションに使用できます。このアプローチの問題は、ここでユーザーコントロールから直接ナビゲートしているため、ナビゲートする前にProjectsPageで操作を実行することはできません(NavigationCacheを有効にしている場合はデフォルトをリセットするなど)。あなたの周りの仕事はあなたのOnNavigatingFromオーバーライドにそれを置くことができます。
  3. 推奨:これは私が簡単な解決策を行うためのもので、イベント、代理人を使用しています。ユーザーコントロールコードの後ろにクイックイベントを書き込む(例:public event Action<MyClass> RequestViewChange;)。

そしてボタンは、ユーザーコントロールの単純な火災アップイベントに押され、ProjectsPageはそれに耳を傾け、それに応じて行動しましょうされている場合ProjectsPageにあなたはuserControlのこのイベントをサブスクライブすることができます。

コンテンツを定義することなくできるだけ多くのイベント引数を送信できるので、Action<T>をデリゲートとして使用します。

私はそれがちょっと変わったアプローチだと知っていますが、それは魅力のように機能します。そして、ビジュアルツリーを上っていくのに比べて、ずっと面倒ではありません。お気軽にコメント欄を使用してください。

関連する問題