欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > WPF 导航

WPF 导航

2025/5/5 12:06:34 来源:https://blog.csdn.net/weixin_48990772/article/details/147614890  浏览:    关键词:WPF 导航

WPF 导航相关控件/机制

控件 / 类说明常用属性/方法
Frame用来承载不同的页面 (Page) 并在它们之间切换的容器。Source(导航到的 URI) Navigate()(导航方法) CanGoBack / GoBack() CanGoForward / GoForward()
Page表示一个单独的可导航页面(可以像网页那样切换)。NavigationService(访问导航服务)
NavigationWindow自带导航栏的窗口,可以在多个页面(Page)间导航。Source(启动时加载的页面) ShowsNavigationUI(是否显示导航栏)
NavigationService后台管理 Frame 或 Page 导航动作的类。Navigate() GoBack() GoForward() RemoveBackEntry()

常见场景示例

一、使用 Frame 控件

1. 使用 Frame 导航到一个 Page

MainWindow.xaml 中添加一个 Frame:

 <Window x:Class="WpfApp.MainWindow"...><Grid><Frame x:Name="MainFrame" NavigationUIVisibility="Hidden" /><Button Content="跳转" Click="Button_Click" HorizontalAlignment="Right" VerticalAlignment="Top"/></Grid></Window>

MainWindow.xaml.cs 后台跳转页面:

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

2. Page 内部也可以继续导航

比如在 Page1.xaml

 <Grid><Button Content="Page2" Click="GoToPage2_Click"/></Grid>

Page1.xaml.cs

 private void GoToPage2_Click(object sender, RoutedEventArgs e){NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative));}

补充属性

  • NavigationUIVisibility="Hidden":隐藏 Frame 自带的导航栏。

  • JournalOwnership="OwnsJournal":让 Frame 记录自己的导航历史。

  • KeepAlive="True":Page 保持实例,不每次都重新加载(否则每次跳回来都会重新创建)。

二、使用 NavigationWindw导航窗体

  1. 创建一个window窗体

  2. <window> 改为<NavigationWindw >

    <!--  NavigationWindow窗体当成其他Page页面的容器。  -->
    <!--  Source=""当前容器中应该放置哪个Page页面  -->
    <NavigationWindowx:Class="导航窗体.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"Title="MainWindow"Source="/Pages/MainPage.xaml"mc:Ignorable="d"/>
    </NavigationWindow>
  3. 把.cs 中的类继承改为 :NavigationWindow

    public partial class MainWindow : NavigationWindow
  4. 在 xaml 中设置点鼠标击事件

  5. 在 .cs 中设置事件

    private void TextBlock MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {// 跳转到新页面this.NavigationService.Navigate(new Uri("完整的路径");//this.NavigationService.Navigate(new Uri(new page1);//this.NavigationService.Navigate(new Uri("相对路径", UriKind.Relative));
    }

UriKind :是一个枚举,它定义了如何解释 URI 字符串:

  • UriKind.Absolute:指定 URI 是一个绝对路径(完整的路径)。

  • UriKind.Relative:指定 URI 是一个相对路径(相对于当前位置)。

  • UriKind.RelativeOrAbsolute:指定 URI 可以是绝对路径或相对路径。使用这种类型,.NET 会根据输入字符串来判断 URI 是绝对的还是相对的。

C# NavigationService 属性:

成员类型作用
CanGoBackbool是否可以返回上一页(是否有返回历史)。
CanGoForwardbool是否可以前进到下一页。
CurrentSourceUri获取当前页面的地址。
BackStackIEnumerable返回历史的集合(栈)。
ForwardStackIEnumerable前进历史的集合(栈)
Navigate(Uri uri)方法导航到指定 URI 的页面。
Navigate(Object content)方法导航到指定的 Page 对象。
GoBack()方法回到上一页。
GoForward()方法前进到下一页。
RemoveBackEntry()方法删除上一页的历史记录。
Refresh()方法重新加载当前页

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词