WPF中的页面跳转分为window页面跳转和page页面跳转两类。window为顶级窗体,其中可以包含frame和page。而frame和page可以相互包含。
window中的页面跳转一般是创建一个窗体然后调用show方法。

Page的页面跳转根据其宿主元素一般分为navigationiwindow和frame两种方式。
其中frame为轻量级元素,可以嵌入page中间。
而Navigationwindow为顶级窗口不可以包含于其他元素中间。而且navigationwindow有导航栏,类似于浏览器的导航界面,可以记录历史导航。但只提供跳转功能而不保存状态信息,可以通过该类提供的方法来保存状态信息。

前台跳转:

<Button Height="35" Width="60"  >
            <Hyperlink x:Name="Link1"  NavigateUri="Page1.xaml">Page1</Hyperlink>
        </Button>  //前台跳转
        <Button Height="35" Width="60" Margin="228,218,229,66"  >
            <Hyperlink x:Name="Link2"  Click="Link2_Click">Pag2</Hyperlink>
        </Button>
        <Button Height="35" Width="60" Margin="228,68,229,216"  Click="Button_Click">
           page1
        </Button>
        <Frame x:Name="Nav" Width="517" HorizontalAlignment="Right" ></Frame>

用Hyperlink的方式直接跳转至目标页面。

后台跳转:

1、用Hyperlink进行跳转
Hyperlink实现了NavigateUri 属性,该属性是使用单击超链接时应导航到的内容的 Uri进行设置的。但是只有在Hyperlink的直接或间接父项是导航宿主(包括 NavigationWindow、Frame)
①利用frame进行跳转

 private void Link2_Click(object sender, RoutedEventArgs e)
        {
            Page2 p2 = new Page2();
            Nav.Content = p2;
        }

Frame 是能够定位到并显示内容的内容控件。 Frame 可以在其他内容中承载,与其他控件和组件。
②也用Content直接创建

 this.Content = new Page2();

③使用navigationservice类
1、

Page2 page = new Page2();
 NavigationService ns = NavigationService.GetNavigationService(this);
            ns.Navigate(page);

2、

           NavigationService ns = NavigationService.GetNavigationService(this);
            ns.Source = new Uri("Page2.xaml", UriKind.Relative);

3、

            NavigationService ns = NavigationService.GetNavigationService(this);
            ns.Content = new Page2();

4、

     Page2 page = new Page2(); 
     this.NavigationService.Navigate(page);

2、用frame进行导航

  private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.pc.Navigate(new Uri("Page1.xaml",UriKind.Relative));
          }

3、用Navigationwindow类进行页面跳转

  private void Button_Click(object sender, RoutedEventArgs e)
        {
            NavigationWindow wds = new NavigationWindow();
            wds.Source = new Uri("Page1.xaml", UriKind.Relative);
            wds.Show();
        }

NavigationWindow 派生自 Window ,扩展了导航和显示内容的功能。 因为其前后导航的功能,使得导航更加便捷,因此这个框架也是我最喜欢使用的方式。

以下介绍一些简单概念:
概念内容文档参考:

http://ju.outofmemory.cn/entry/112635

Page

Page 封装一页可导航的内容,并具有以下关键成员:

生存期管理:KeepAlive。

导航:NavigationService。

外观:Background、Content、FontFamily、FontSize、Foreground、ShowsNavigationUI、Template、Title。

宿主窗口外观:WindowHeight、WindowWidth、WindowTitle。

可以使用标记、标记和代码隐藏或者代码来定义页。

NavigationWindow

NavigationWindow 派生自Window,扩展了导航和显示内容的功能。

内容可以是任何 .NET Framework 对象或 HTML 文件。但是,一般而言,Page 对象是将内容打包以便导航的首选方式。

通过用所需内容的 URI 来设置Source 属性,可以导航到内容。

Frame

Frame 是能够定位到并显示内容的内容控件。 Frame 可以在其他内容中承载,与其他控件和组件。

当 Frame 控件导航到 HTML 内容时,内部Frame 控件实例化本机 webbrowser Activex 控件。WPF
通过对函数控件启用安全功能在浏览器 Activex 控件。应用于的功能控制对 XBAP 和独立应用程序不同。
某些应用程序应通过附加功能控制防止恶意内容运行。有关更多信息,请参见中的 “浏览器控件和功能控制”在安全性 (WPF)
的和WebBrowser Control Overviews and Tutorials部分。

内容可以是任何类型的 .NET Framework 对象和 HTML 文件。但是,通常,页是首选该方法可导航的内容打包 (请参见Page)。

内容可以导航到通过设置与 URI 的 Source 属性所需内容的。另外,可以使用Navigate 方法的以下重载之一,内容可以导航到:

Navigate(Uri)

Navigate(Uri, Object)

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐