2016-08-18 42 views
-1

我有導航和視圖的設計問題。我需要爲我的應用程序,如OverviewPage,DetailPage,網頁等不同的看法不理解導航使用框架

我試着用幀這樣做:

MainFrame.Navigate(typeof(OverviewPage)); 

然後,而在OverviewPage用戶可以瀏覽到詳細頁面,可能將參數傳遞給新頁面。

此時我從OverviewPage中的Frame中失去對導航到DetailPage的Frame的控制。我肯定會做錯事,像這樣嵌套框架 - 但我該怎麼做呢?

我的另一個想法是使用單個網格與網格/面板裏面,我用Visibility.CollapsedVisibility.Visible顯示和隱藏。這是根據用戶行爲和上下文顯示不同視圖的適當方式嗎?

任何想法都會很棒,我明顯錯過了一些東西。

+0

在頁面中使用'NavigationService.Navigate()'。這使您可以訪問框架的導航器。 –

回答

0

有一些方法可以做到這一點,但我不會使用可見性來處理導航,因爲已經有一個NavigationService來完成這項工作。您可以使用單個框架來保存要導航的視圖。比方說,你必須有這樣的框架的主窗口:

<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,其中將包含當前幀,前一幀和其他東西。

現在,你應該在的NavigationService設置到主窗口的ContentFrame的的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

不使用MainPage內的框架而使用根框架意味着視圖完全移動到新的頁面?我是否必須將UI元素(比如我使用Frame切換到新頁面的左側的菜單)寫入每個頁面的XAML? – Alexej

+0

整個頁面變化是。如果你想要一個菜單​​,看看[SplitView示例](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/XamlNavigation) – Bart

+0

我看了你發佈的例子,這對我來說很複雜。你能解釋他在切換頁面後如何保留菜單嗎?你仍然可以在上下文中使用'Frame.Navigate()'方法嗎? – Alexej