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

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

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

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

XML 复制代码
<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事件中启动(推荐使用)

XML 复制代码
<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>
cs 复制代码
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入口方法,(不建议)

cs 复制代码
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        Application.Current.MainWindow = new MainWindow();
        Application.Current.MainWindow.Show();
    }
}
cs 复制代码
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方法启动虽然提供了最大的灵活性,但通常不推荐,因为它可能导致资源管理问题。
相关推荐
谁怕平生太急21 小时前
MAI-UI的prompt
ui·prompt·gui agent·mai-ui
ttod_qzstudio21 小时前
从Unity的C#到Babylon.js的typescript:“函数重载“变成“类型魔法“
typescript·c#·重载·babylon.js
eggcode1 天前
C#读写Bson格式的文件
c#·json·bson
是一个Bug1 天前
Java后端开发面试题清单(50道) - 分布式基础
java·分布式·wpf
爱说实话1 天前
C# 20260109
开发语言·c#
六点的晨曦1 天前
Qt常用的开发架构模式与UI组件
qt·ui·架构
无心水1 天前
【分布式利器:腾讯TSF】4、TSF配置中心深度解析:微服务动态配置的终极解决方案
分布式·微服务·架构·wpf·分布式利器·腾讯tsf·分布式利器:腾讯tsf
Aotman_1 天前
JS 按照数组顺序对对象进行排序
开发语言·前端·javascript·vue.js·ui·ecmascript
一心赚狗粮的宇叔1 天前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#