`
WPF中实现页面跳转
WPF是Windows Presentation Foundation的缩写,是微软推出的一种用于创建桌面应用程序的技术。WPF中有一个重要的概念就是页面(Page),它可以让我们在一个窗口(Window)中显示不同的内容,实现类似于网页浏览器的效果。页面跳转就是指从一个页面切换到另一个页面的过程。在本文中,我们将介绍WPF中实现页面跳转的几种常用方法。
方法一:使用Frame控件
Frame控件是一个可以显示其他内容的容器控件,它可以加载页面、文档或者用户控件(UserControl)。我们可以在窗口中放置一个Frame控件,然后通过设置它的Source属性来指定要显示的页面的地址。例如,如果我们有两个页面Page1.xaml和Page2.xaml,我们可以在窗口中添加如下代码:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Frame x:Name="frame" />
</Grid>
</Window>
然后在窗口的代码后台中,我们可以通过如下代码来实现页面跳转:
//跳转到Page1
frame.Source = new Uri("Page1.xaml", UriKind.Relative);
//跳转到Page2
frame.Source = new Uri("Page2.xaml", UriKind.Relative);
这种方法比较简单,但是有一个缺点,就是每次跳转都会重新创建一个新的页面对象,这会消耗更多的资源,并且无法保留页面之间的状态。
方法二:使用NavigationService类
NavigationService类是一个提供导航功能的类,它可以在窗口或者Frame控件中使用。我们可以通过调用它的Navigate方法来实现页面跳转,并且可以传递一些参数给目标页面。例如,如果我们想要在跳转到Page2时传递一个字符串参数"Hello",我们可以在窗口中添加如下代码:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Frame x:Name="frame" />
</Grid>
</Window>
然后在窗口的代码后台中,我们可以通过如下代码来实现页面跳转:
//跳转到Page1
frame.NavigationService.Navigate(new Page1());
//跳转到Page2,并传递参数
frame.NavigationService.Navigate(new Page2(), "Hello");
这种方法的优点是可以传递参数,并且可以利用导航历史来实现前进和后退的功能。但是它也有一个缺点,就是每次跳转仍然会重新创建一个新的页面对象。
方法三:使用PageFunction类
PageFunction类是一种特殊的页面,它可以实现类似于对话框的功能,即在跳转到另一个页面时暂停当前页面,并且在返回时恢复当前页面的状态。我们可以通过继承PageFunction类来创建自定义的PageFunction,并且可以通过设置它的KeepAlive属性来决定是否保留页面对象。例如,如果我们有一个名为MyPageFunction的自定义PageFunction,并且想要在跳转到它时暂停当前页面,并且在返回时恢复当前页面的状态,我们可以在窗口中添加如下代码:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Frame x:Name="frame" />
</Grid>
</Window>
然后在窗口的代码后台中,我们可以通过如下代码来实现页面跳转:
//跳转到Page1
frame.NavigationService.Navigate(new Page1());
//跳转到MyPageFunction,并暂停当前页面
MyPageFunction mpf = new MyPageFunction();
mpf.KeepAlive = true; //保留页面对象
mpf.Return += Mpf_Return; //注册返回事件
frame.NavigationService.Navigate(mpf);
//处理返回事件
private void Mpf_Return(object sender, ReturnEventArgs<string> e)
{
//获取返回值
string result = e.Result;
//恢复当前页面的状态
}
这种方法的优点是可以实现页面之间的状态保存,并且可以获取返回值。但是它也有一个缺点,就是需要创建自定义的PageFunction类,并且需要注册返回事件。
标签:控件,NavigationService,frame,跳转,WPF,Page1,页面 From: https://blog.51cto.com/u_16477312/8999562