C# WPF实现页面跳转的两种方法介绍

 更新时间:2025年10月22日 08:49:40   作者:张謹礧  
在 C# WPF 中,页面跳转通常有两种主要方式:使用 NavigationWindow+Page或在 Window 中切换 UserControl,下面我们来看看具体实现方法吧

在 C# WPF 中,页面跳转通常有两种主要方式:使用 NavigationWindow+Page或在 Window 中切换 UserControl。以下是具体实现方法:

一、使用 NavigationWindow+Page 实现跳转(适合导航场景)

1. 创建导航窗口(NavigationWindow)

NavigationWindow 是专门用于页面导航的窗口,自带导航按钮(前进 / 后退)。

步骤 1:新建 NavigationWindow

在项目中添加一个NavigationWindow(如MainNavWindow.xaml):

<!-- MainNavWindow.xaml -->
<NavigationWindow x:Class="WpfApp.MainNavWindow"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  Title="导航窗口" Width="800" Height="600"
                  Source="Page1.xaml"> <!-- 设置初始页面 -->
</NavigationWindow>

步骤 2:设置启动窗口

App.xaml中指定启动窗口为MainNavWindow

<Application x:Class="WpfApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainNavWindow.xaml"> <!-- 改为导航窗口 -->
</Application>

2. 创建 Page 页面

新建多个Page(如Page1.xamlPage2.xaml)作为跳转目标:

Page1.xaml(包含跳转到 Page2 的按钮):

<Page x:Class="WpfApp.Page1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="Page1">
    <StackPanel>
        <TextBlock FontSize="20" Text="这是页面1"/>
        <Button Content="跳转到页面2" Click="GoToPage2"/>
    </StackPanel>
</Page>

Page1.xaml.cs(实现跳转逻辑):

private void GoToPage2(object sender, RoutedEventArgs e) {
    // 跳转到Page2
    this.NavigationService.Navigate(new Page2());
}

3. 常用导航操作

返回上一页:

if (this.NavigationService.CanGoBack) {
    this.NavigationService.GoBack(); // 后退
}

前进到下一页:

if (this.NavigationService.CanGoForward) {
    this.NavigationService.GoForward(); // 前进
}

刷新当前页:

this.NavigationService.Refresh();

二、在 Window 中切换 UserControl(适合单窗口应用)

如果不需要导航历史,可在Window中通过切换UserControl实现 “页面” 切换,更灵活。

1. 创建 UserControl(模拟页面)

新建两个UserControl(如UC_Home.xamlUC_Settings.xaml):

UC_Home.xaml

<UserControl x:Class="WpfApp.UC_Home"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBlock FontSize="20" Text="这是首页"/>
</UserControl>

UC_Settings.xaml

<UserControl x:Class="WpfApp.UC_Settings"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBlock FontSize="20" Text="这是设置页"/>
</UserControl>

2. 在 Window 中切换 UserControl

在主窗口中用一个容器(如Grid)承载UserControl,通过代码动态切换:

MainWindow.xaml

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="切换页面示例" Width="800" Height="600">
    <Grid>
        <!-- 导航按钮 -->
        <StackPanel Orientation="Horizontal" Margin="10">
            <Button Content="首页" Click="ShowHome" Margin="5"/>
            <Button Content="设置" Click="ShowSettings" Margin="5"/>
        </StackPanel>
        
        <!-- 页面容器(用于显示UserControl) -->
        <Grid x:Name="ContentContainer" Margin="10,50,10,10"/>
    </Grid>
</Window>

MainWindow.xaml.cs(切换逻辑):

private void ShowHome(object sender, RoutedEventArgs e) {
    // 清空容器,添加首页UserControl
    ContentContainer.Children.Clear();
    ContentContainer.Children.Add(new UC_Home());
}
​
private void ShowSettings(object sender, RoutedEventArgs e) {
    // 清空容器,添加设置页UserControl
    ContentContainer.Children.Clear();
    ContentContainer.Children.Add(new UC_Settings());
}

三、两种方式的对比

方式优点缺点适用场景
NavigationWindow+Page自带导航历史(前进 / 后退)导航栏样式固定,定制性差类似浏览器的多页面导航
Window+UserControl完全自定义布局,灵活度高需手动实现导航历史(如需要)单窗口应用,如管理系统界面

根据需求选择合适的方式,小型应用推荐用Window+UserControl,需要完整导航功能时用NavigationWindow+Page

到此这篇关于C# WPF实现页面跳转的两种方法介绍的文章就介绍到这了,更多相关WPF页面跳转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#通过GET/POST方式发送Http请求

    C#通过GET/POST方式发送Http请求

    本文主要介绍了C#实现http请求的两种方式,get和post方式。文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C#反射编程之GetConstructor()方法解读

    C#反射编程之GetConstructor()方法解读

    C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函数,返回值为ConstructorInfo类型,表示找到的构造函数,如果没有找到则返回null
    2024-12-12
  • C#设计模式之观察者模式实例讲解

    C#设计模式之观察者模式实例讲解

    这篇文章主要介绍了C#设计模式之观察者模式实例讲解,本文详细讲解了观察者模式的定义、优缺点、代码实例等,需要的朋友可以参考下
    2014-10-10
  • WPF弹出右键菜单时判断鼠标是否选中该项

    WPF弹出右键菜单时判断鼠标是否选中该项

    这篇文章介绍了WPF弹出右键菜单时判断鼠标是否选中该项的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 通过C#实现裁剪PDF页面功能

    通过C#实现裁剪PDF页面功能

    在处理PDF文档时,有时需要精确地裁剪页面以适应特定需求,比如去除广告、背景信息或者仅仅是为了简化文档内容,本文将指导如何使用免费.NET控件通过C#实现裁剪PDF页面,需要的朋友可以参考下
    2024-09-09
  • C#查找素数实现方法

    C#查找素数实现方法

    这篇文章主要介绍了C#查找素数实现方法,程序中有很多使用的功能模块,非常适合C#初学者学习借鉴,需要的朋友可以参考下
    2014-08-08
  • C#读写txt文件的2种方法

    C#读写txt文件的2种方法

    这篇文章主要为大家详细介绍了C#读写txt文本文档数据的2种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • C#中sleep和wait的区别分析

    C#中sleep和wait的区别分析

    这篇文章主要介绍了C#中sleep和wait的区别分析,有助于深入理解C#中线程的原理与使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Unity UGUI实现卡片椭圆方向滚动

    Unity UGUI实现卡片椭圆方向滚动

    这篇文章主要为大家详细介绍了UGUI实现卡片椭圆方向滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C#集合之并发集合的用法

    C#集合之并发集合的用法

    这篇文章介绍了C#集合之并发集合的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论