You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Template Studio WPF CodeBehind项目如何实现后台代码导航

WPF Template Studio(CodeBehind模式)带参数导航实现方案

Windows Template Studio v5.1 生成的SplitView+CodeBehind架构WPF项目,导航逻辑和UWP的静态NavigationService调用逻辑基本一致,区别仅在于导航服务默认通过依赖注入容器托管,不是全局静态类,具体实现步骤如下:

1. 获取导航服务实例发起导航

在任意需要触发导航的代码位置(页面后台、自定义控件逻辑中),通过App全局服务容器拿到INavigationService实例,调用NavigateTo方法即可,第一个参数传目标页面的完整类名,第二个参数传导航参数,和UWP传参逻辑完全一致:

using Microsoft.Extensions.DependencyInjection;
// 引入项目自身命名空间、目标页面的命名空间

// 导航触发逻辑(比如按钮点击事件、业务逻辑判断分支中)
var navigationService = App.Current.Services.GetService<INavigationService>();
// 等效于UWP写法:NavigationService.Navigate(typeof(destinationView), "myParam")
navigationService.NavigateTo(typeof(destinationView).FullName, "myParam");

注意:不要手动new导航服务实例,必须从全局服务容器获取,否则会出现SplitView导航栏选中状态不更新、导航日志失效的问题。

2. 目标页面接收导航参数

需要接收参数的目标页面实现INavigationAware接口,在OnNavigatedTo方法中就能拿到传入的参数:

using Wpf.Ui.Common.Interfaces;
using System.Windows.Controls;

public partial class destinationView : Page, INavigationAware
{
    public destinationView()
    {
        InitializeComponent();
    }

    /// <summary>
    /// 页面导航到达时触发
    /// </summary>
    /// <param name="parameter">导航传入的参数</param>
    public void OnNavigatedTo(object parameter)
    {
        // 做参数判空、类型校验后使用
        if (parameter is string passedParam)
        {
            // 写参数处理逻辑,比如加载数据、给控件赋值
        }
    }

    /// <summary>
    /// 页面离开时触发
    /// </summary>
    public void OnNavigatedFrom()
    {
        // 写页面离开时的清理逻辑,比如注销事件、释放临时资源
    }
}

补充说明

  • 导航参数支持任意object类型,除了字符串,也可以传自定义实体类、数值类型等任意对象
  • 如果需要使用导航回退功能,直接调用navigationService.GoBack()即可,和UWP的回退逻辑一致
  • 所有通过模板新增的页面,会自动注册到导航服务的页面映射表中,不需要手动额外配置

内容的提问来源于stack exchange,提问作者cdt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:21:37