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

WinUI3项目中FirstPage如何访问App类中声明的对象?

WinUI3中访问App类对象的常用方式

已知你提到的将App类成员声明为静态成员是一种可行方法,除此之外还有以下几种实用方式:

1. 静态成员访问法

直接在App类中把需要共享的对象声明为静态成员,示例代码如下:

public sealed partial class App : Application
{
    // 声明静态成员对象
    public static MySharedObject GlobalSharedObj { get; set; } = new MySharedObject();
    // 其他App类逻辑代码
}

在FirstPage中直接通过类名访问该静态对象:

var targetObj = App.GlobalSharedObj;

2. 获取App实例访问非静态成员

如果不想使用静态成员,可以通过Application.Current获取当前App的实例,再强转为自定义的App类型,从而访问非静态成员:

public sealed partial class App : Application
{
    // 声明非静态成员对象
    public MySharedObject InstanceSharedObj { get; set; } = new MySharedObject();
    // 其他App类逻辑代码
}

在FirstPage中的访问代码:

var currentApp = (App)Application.Current;
var targetObj = currentApp.InstanceSharedObj;

3. 依赖注入法(推荐)

对于架构更规范的项目,推荐用依赖注入来传递对象,避免页面与App类直接耦合:

  1. 在App的OnLaunched方法中注册服务:
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    var serviceCollection = new ServiceCollection();
    // 注册单例对象
    serviceCollection.AddSingleton<MySharedObject>();
    var serviceProvider = serviceCollection.BuildServiceProvider();
    
    // 初始化窗口和页面时,从容器获取对象并传入
    var rootFrame = new Frame();
    rootFrame.Navigate(typeof(FirstPage), serviceProvider.GetService<MySharedObject>());
    // 其他窗口初始化逻辑
}
  1. 在FirstPage构造函数中注入该对象:
public FirstPage(MySharedObject sharedObj)
{
    this.InitializeComponent();
    // 直接使用注入的sharedObj
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:32:32