2016-08-18 2 views
-1

Ich habe Design-Probleme in Bezug auf Navigation und Ansichten. Ich brauche verschiedene Ansichten für meine Anwendung wie OverviewPage, Detailpage, HomePage usw.Nicht verstehen, Navigation mit Frames

Ich habe versucht, dies zu tun mit Frames:

MainFrame.Navigate(typeof(OverviewPage)); 

Dann, während auf der OverviewPage der Benutzer die navigieren können DetailPage, mögliche Weitergabe von Parametern an die neue Seite.

An diesem Punkt verliere ich die Kontrolle über den Frame in OverviewPage seit dem Frame innerhalb der zu DetailPage navigiert. Ich mache sicherlich etwas falsches, nistet Frames so - aber wie kann ich das sonst noch machen?

Meine andere Idee ist ein einzelnes Grid mit Grids/Panels innerhalb von denen, die ich ein- und ausblenden mit Visibility.Collapsed und Visibility.Visible. Ist dies ein geeigneter Weg, unterschiedliche Ansichten zu zeigen, abhängig von der Benutzeraktion und dem Kontext?

Irgendwelche Ideen wären toll, mir fehlt eindeutig etwas.

+0

Verwenden Sie 'NavigationService.Navigate()' auf der Seite. Dadurch haben Sie Zugriff auf den Navigator des Rahmens. –

Antwort

0

Es gibt einige Möglichkeiten, dies zu tun, aber ich würde keine Sichtbarkeit verwenden, um die Navigation zu handhaben, da es bereits einen NavigationService gibt, um die Aufgabe zu erledigen. Sie können einen einzelnen Frame verwenden, um die Ansichten zu halten, die Sie durchsuchen möchten. Lassen Sie uns sagen, dass Sie ein Hauptfenster haben, das einen Rahmen wie dieser hat:

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

Jetzt sollten Sie eine öffentliche Klasse, die eine statische Methode hat, die eine Navigation zurück. Nennen wir es Navigator.cs:

using System.Windows.Navigation; 

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

Diese Klasse ein Navigationzurückgibt, die den aktuellen Rahmen der bisherigen Rahmen und andere Dinge enthalten.

Jetzt sollten Sie die Navigation auf die Navigation des ContentFrame des Mainwindow gesetzt:

Navigator.NavigationService = window.ContentFrame.NavigationService; 

Schließlich Sie die Navigation einfach jetzt umgehen kann.

Navigator.NavigationService.Navigate(SomeView); 
0

Ich nehme an, Sie verwenden MVVM nicht. Es müssen keine neuen Frames erstellt werden, da die Seiten in einem Rootframe gehostet werden. Jede Seite hat eine Frame Eigenschaft, um auf diesen Root-Frame zu verweisen. Verwenden Sie einfach diese Eigenschaft, um zu navigieren.

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

gehen ist wieder so einfach wie:

Frame.GoBack(); 

A NavigationService oft mit dem MVVM Muster verwendet wird, aber für eine sehr einfache Anwendung ohne MVVM des Frame.Navigate Ansatz perfekt zu arbeiten.

+0

Wenn Sie keinen Frame in der MainPage verwenden und stattdessen den Rootframe verwenden, wird die Ansicht vollständig auf die neue Seite verschoben. Müsste ich die UI-Elemente (wie ein Menü links neben dem, wo ich einen Frame verwendet habe, um zu einer neuen Seite zu wechseln) in den XAML jeder Seite schreiben? – Alexej

+0

Die ganze Seite ändert sich ja.Wenn Sie ein Menü möchten, werfen Sie einen Blick auf das [SplitView-Beispiel] (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/XamlNavigation) – Bart

+0

Ich habe mir das von Ihnen gepostete Beispiel angesehen Es ist ziemlich komplex für mich. Können Sie erklären, wie er das Menü nach dem Wechseln von Pages behält? Können Sie in diesem Kontext noch die 'Frame.Navigate()' Methode verwenden? – Alexej