我遇到有关导航和视图的设计问题。我需要为我的应用程序提供不同的视图,例如OverviewPage,DetailPage,HomePage等。
我尝试使用Frames:
MainFrame.Navigate(typeof(OverviewPage));
然后,在 OverviewPage 上,用户可能会导航到 DetailPage ,可能会将参数传递给新页面。
此时,由于导航到DetailPage的Frame内部,我失去了对OverviewPage中Frame的控制。我肯定做错了什么,嵌套这样的框架 - 但我怎么能这样做呢?
我的另一个想法是使用带有网格/面板的单个网格,我使用Visibility.Collapsed
和Visibility.Visible
显示和隐藏。这是根据用户操作和上下文显示不同视图的适当方式吗?
任何想法都会很棒,我显然错过了一些东西。
答案 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
方法运行良好。