2016-08-18 12 views
-1

ナビゲーションとビューに関する設計上の問題があります。フレームを使用したナビゲーションがわからない

MainFrame.Navigate(typeof(OverviewPage)); 

その後、OverviewPageにユーザーがに移動かもしれないが、私は、私はフレームでこれをやってみましたなどOverviewPage、DetailPage、ホームページ、など私のアプリのためのさまざまなビュー

が必要DetailPage、可能なパラメータを新しいページに渡します。

この時点で、DetailPageにナビゲートされたフレーム内のFrameは、OverviewPage内のFrameのコントロールを失います。私は確かに間違ったことをしています、そういうフレームを入れ子にしています - それ以外はどうすればいいですか?

私の他のアイデアは、Visibility.CollapsedVisibility.Visibleで表示/非表示にするグリッド/パネル付きの単一のグリッドを使用しています。これは、ユーザーの操作やコンテキストに応じて異なるビューを表示する適切な方法ですか?

いずれのアイデアも素晴らしいと思います。

+0

このページの 'NavigationService.Navigate()'を使用してください。これにより、フレームのナビゲータにアクセスできます。 –

答えて

0

これを行うにはいくつかの方法がありますが、ナビゲーションを処理するための可視性は使用しません。これは、既にそのジョブを実行するNavigationServiceがあるためです。 1つのフレームを使用して、移動するビューを保持することができます。あなたはこのようなフレームを持つメインウィンドウを持っているとしましょう:

<Grid> 
    <Frame Name="ContentFrame" Content="{Binding}" NavigationUIVisibility="Hidden" /> 
</Grid> 

今、あなたはのNavigationServiceを返します静的メソッドを持つパブリッククラスを作成する必要があります。それNavigator.csを呼び出すことができます:

using System.Windows.Navigation; 

namespace YourNamespace 
{ 
    public class Navigator 
    { 
     public static NavigationService NavigationService { get; set;} 
    } 
} 

このクラスは、現在のフレーム、前のフレームと他のものが含まれますのNavigationServiceを返します。

は今、あなたは、メインウィンドウのContentFrameののNavigationServiceへのNavigationServiceを設定する必要があります。

Navigator.NavigationService = window.ContentFrame.NavigationService; 

最後に、あなたが今、本当に簡単なナビゲーションを処理することができます。

Navigator.NavigationService.Navigate(SomeView); 
0

MVVMを使用していないとします。ページがルートフレーム内でホストされるため、新しいフレームを作成する必要はありません。すべてのページにはこのルートフレームを参照するためのFrameプロパティがあり、そのプロパティを使用してナビゲートします。戻って

private void TestClick(object sender, RoutedEventArgs e) 
{ 
    Frame.Navigate(typeof (BlankPage1)); 
} 

は同じくらい簡単です:

Frame.GoBack(); 

NavigationServiceしばしばMVVMパターンで使用されているが、非常にシンプルなアプリのためにMVVMなしFrame.Navigateアプローチが完璧に働いています。

+0

メインページ内でフレームを使用せず、代わりにルートフレームを使用すると、ビューが新しいページに完全に移動したことを意味しますか?すべてのページのXAMLにUI要素(新しいページに切り替えるためにフレームを使用した場所の左にあるメニューのような)を記述する必要がありますか? – Alexej

+0

ページ全体が変更されます。メニューが必要な場合は、[SplitViewサンプル](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/XamlNavigation)をご覧ください – Bart

+0

投稿したサンプルを見ましたそれは私にとって非常に複雑です。 Pagesを切り替えた後にメニューを保持する方法を説明できますか?そのコンテキストで 'Frame.Navigate()'メソッドを使用できますか? – Alexej

関連する問題