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

Xamarin.Forms OnLaunched不触发、LaunchActivatedEventArgs报错排查

根本原因

你参考的文档是UWP/Windows App SDK原生开发的文档,和Xamarin.Forms跨平台开发的生命周期模型完全不匹配:

  • LaunchActivatedEventArgs、OnLaunched启动生命周期方法是UWP原生项目的专属API,不属于Xamarin.Forms共享层的Application类。Xamarin.Forms的Application类只开放了OnStart、OnSleep、OnResume三个可重写的生命周期方法,根本不存在匹配OnLaunched(LaunchActivatedEventArgs e)签名的可重写方法。
  • 你手动在共享项目的App类里加的OnLaunched方法是完全自定义的普通方法,Xamarin.Forms框架启动流程里根本没有调用这个方法的逻辑,自然断点永远不会命中。
  • 你引入的Windows.ApplicationModel.Activation是UWP专属命名空间,直接写在共享项目里后续适配Android、iOS时会直接编译失败,这两个平台不存在这个命名空间下的类型。
修复方案

如果你的目标是做跨UWP、Android、iOS三端通用的C#代码式样式初始化,完全不需要用平台专属的启动方法,直接把初始化逻辑放在共享项目App类的构造函数中执行即可:

  1. 删除手动添加的无效OnLaunched方法,移除共享项目中对Windows.ApplicationModel.Activation的引用,避免跨平台编译错误。
  2. 将样式初始化代码放到App构造函数中,放在InitializeComponent()调用之后、设置MainPage之前即可,修改后的代码如下:
using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using FieldDataTemplateSelectorSample.AppStyles;

namespace FieldDataTemplateSelectorSample
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();
            // 全局样式初始化,三端启动时都会执行
            Resources = InitStyles.GetAppStyles();
            MainPage = new MainPage();
        }

        protected override void OnStart()
        {
        }

        protected override void OnSleep()
        {
        }

        protected override void OnResume()
        {
        }
    }
}

如果后续需要写UWP平台专属的启动逻辑,不要写在共享项目中,直接找到UWP平台项目目录下的原生App.xaml.cs,在那个类里重写UWP原生的OnLaunched方法即可,该方法才会被UWP框架在应用启动时自动调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:49:18