当前位置: 首页 > article >正文

C#WPF的App.xaml启动第一个窗体的3种方式

WPF的App.xaml启动第一个窗体的3种方式

1.使用App.xamlStartupUri属性启动(推荐使用)

App.xaml文件中,你可以设置StartupUri属性来指定启动时显示的第一个窗口:

<Application x:Class="浅看一眼WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:浅看一眼WPF"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <!-- 应用程序资源 -->
    </Application.Resources>
</Application>

在这种情况下,当应用程序启动时,WPF会自动查找并打开MainWindow.xaml指定的窗口。

2.在App.xaml.csStartup事件中启动(推荐使用)

<Application x:Class="浅看一眼WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:浅看一眼WPF"
             Startup="Application_Startup">
    <Application.Resources>

    </Application.Resources>
</Application>
public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        MainWindow mainWindow = new MainWindow();
        //mainWindow.Show();
        mainWindow.ShowDialog();
    }
}

在这种方法中,当应用程序启动时,Startup方法会被调用,然后创建并显示MainWindow

3.使用Application.Run方法启动:Main入口方法,(不建议)

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        Application.Current.MainWindow = new MainWindow();
        Application.Current.MainWindow.Show();
    }
}
public partial class App : Application
{
    [STAThread]
    public static void Main()
    {
        MainWindow mainWindow = new MainWindow();
        mainWindow.ShowDialog();
        //或者
        Application app1 = new Application();
        app1.StartupUri = new Uri("MainWindow.xaml", UriKind.RelativeOrAbsolute);
        app1.Run();
    }
}

在这种方法中,MainWindow被设置为应用程序的MainWindow属性,并显示它。

三种方法的优缺点: 

1. 使用App.xaml的StartupUri属性启动

这是最简单和最推荐的方法。在App.xaml中设置StartupUri属性,指定启动时显示的第一个窗口的XAML文件。这种方法的优点是代码简洁,不需要在代码后台显式创建和显示窗口。

优点

  • 代码简洁,易于维护。
  • 自动处理窗口的创建和显示。

缺点

  • 灵活性较低,不适合需要在窗口显示前进行复杂初始化的场景。

2. 在App.xaml.cs的Startup事件中启动

App.xaml中设置Startup属性,指定启动事件的处理方法。在App.xaml.cs中重写OnStartup方法或直接在XAML中定义事件处理方法,然后在该方法中创建和显示主窗口。

优点

  • 提供了更多的控制,可以在窗口显示前进行复杂的初始化操作。
  • 可以访问StartupEventArgs,获取启动参数。

缺点

  • 代码相对复杂,需要在代码后台显式创建和显示窗口。
  • 需要正确处理窗口的显示方式(ShowShowDialog)。

3. 使用Application.Run方法启动:Main入口方法

Main方法中直接创建Application实例,然后使用Run方法启动应用程序并显示主窗口。这种方法通常不推荐,因为它可能导致资源管理问题,特别是在多线程环境中。

优点

  • 提供了最大的灵活性,可以在应用程序启动前进行复杂的初始化操作。

缺点

  • 代码复杂,需要手动管理应用程序的生命周期。
  • 可能导致资源管理问题,特别是在多线程环境中。
  • 不符合WPF应用程序的标准模式,可能导致不可预测的行为。

总结

  • 使用App.xaml的StartupUri属性是最简单的方法,适用于大多数标准WPF应用程序。
  • 在App.xaml.cs的Startup事件中启动提供了更多的控制,适用于需要在窗口显示前进行复杂初始化的场景。
  • 使用Application.Run方法启动虽然提供了最大的灵活性,但通常不推荐,因为它可能导致资源管理问题。

http://www.kler.cn/a/400738.html

相关文章:

  • Debezium日常分享系列之:Debezium3版本Debezium connector for JDBC
  • 【论文阅读】主动推理:作为感知行为的理论
  • React--》如何高效管理前端环境变量:开发与生产环境配置详解
  • 前端隐藏元素的方式有哪些?HTML 和 CSS 中隐藏元素的多种方法
  • 计算机组成原理笔记----基础篇
  • 技术理论||02空中三角测量
  • 记录一下在原有的接口中增加文件上传☞@RequestPart
  • java基础面试题笔记(基础篇)
  • 基于YOLOv8深度学习的医学影像甲状腺结节病症检测诊断研究与实现(PyQt5界面+数据集+训练代码)
  • 周报(9)<仅供自己学习>
  • 前端网络性能优化问题
  • 【Go】-bufio库解读
  • Vue3-02
  • 微信小程序自定义tabbar的实现
  • Ekman理论回归
  • Spring Cloud Gateway 网关
  • 【MySQL 保姆级教学】事务的隔离级别(详细)--下(14)
  • c#中通过自定义Converter实现定制DateTime的序列化格式
  • SQL MID() 函数详解
  • TCP协议(三)
  • C#编写的日志记录组件 - 开源研究系列文章
  • git push时报错! [rejected] master -> master (fetch first)error: ...
  • Redis 安全
  • 统信UOS开发环境支持Golang
  • VRRP HSRP GLBP 三者区别
  • ForEach刷新UI机制