2016-08-18 33 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