不了解使用框架的导航

时间:2016-08-18 21:02:44

标签: c# xaml uwp

我遇到有关导航和视图的设计问题。我需要为我的应用程序提供不同的视图,例如OverviewPage,DetailPage,HomePage等。

我尝试使用Frames:

MainFrame.Navigate(typeof(OverviewPage));

然后,在 OverviewPage 上,用户可能会导航到 DetailPage ,可能会将参数传递给新页面。

此时,由于导航到DetailPage的Frame内部,我失去了对OverviewPage中Frame的控制。我肯定做错了什么,嵌套这样的框架 - 但我怎么能这样做呢?

我的另一个想法是使用带有网格/面板的单个网格,我使用Visibility.CollapsedVisibility.Visible显示和隐藏。这是根据用户操作和上下文显示不同视图的适当方式吗?

任何想法都会很棒,我显然错过了一些东西。

2 个答案:

答案 0 :(得分:0)

有一些方法可以做到这一点,但我不会使用可见性来处理导航,因为已经有一个NavigationService来完成这项工作。您可以使用单个框架来保存要导航的视图。假设您有一个MainWindow,其框架如下:

<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设置为MainWindow的ContentFrame的NavigationService:

Navigator.NavigationService = window.ContentFrame.NavigationService;

最后,您现在可以轻松处理导航。

Navigator.NavigationService.Navigate(SomeView);

答案 1 :(得分:0)

我想你没有使用MVVM。由于页面托管在根框架内,因此无需创建新框架。每个页面都有Frame属性来引用此根框架,只需使用该属性进行导航即可。

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

回头就像:

Frame.GoBack();

NavigationService通常与MVVM模式一起使用,但对于没有MVVM的非常简单的应用程序,Frame.Navigate方法运行良好。