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方法启动虽然提供了最大的灵活性,但通常不推荐,因为它可能导致资源管理问题。
相关推荐
初九之潜龙勿用27 分钟前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
MediaTea1 小时前
七次课掌握 Photoshop:绘画与修饰
ui·photoshop
吾与谁归in2 小时前
【C#设计模式(13)——代理模式(Proxy Pattern)】
设计模式·c#·代理模式
吾与谁归in2 小时前
【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
设计模式·c#·责任链模式
神仙别闹3 小时前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
syj_1116 小时前
初识ArkUI
ui·arkts·arkui
向宇it12 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
九鼎科技-Leo13 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
Heaphaestus,RC14 小时前
【Unity3D】获取 GameObject 的完整层级结构
unity·c#
芋芋qwq14 小时前
Unity UI射线检测 道具拖拽
ui·unity·游戏引擎