WPF启动窗体的三种方式

启动窗体的三种方式:
1. StartupUri="MainWindow.xaml",比Application_Startup执行的晚。推荐方案

在App.xaml文件中

csharp 复制代码
<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>

2. Application_Startup事件,可以在启动某个窗体时,携带参数。推荐方案

在App.xaml文件中

csharp 复制代码
<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>

在App.xaml.cs

csharp 复制代码
public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        MainWindow mainWindow = new MainWindow();
        //mainWindow.Show();
        mainWindow.ShowDialog();
    }
}

3. 自定义Main方法,不建议。会造成Startup事件和StartupUri属性无效,控件权完全交给开发者。没必要的。

// App中定义一个Main方法,WPF默认也提供一个Main方法(在App.g.i.cs这个文件中)。但Main入口方法有且只有一个。所以报错。解决:去掉一个Main。

// 通过测试发现XXX.g.i.cs(在obj->Debug中可以看见该文件)这样文件不能改动,重新编译后,WPF会重新生成。改动的地方还原了。造成修改无效。

// 需要:

// 1。把App.xaml生成操作选择"无",即编译App.xaml时不让它产生Main方法。开发者才能自定义Main方法。// 2。添加特性 [STAThread],原因:WPF中的控件运行需要一个线程安全的环境。

csharp 复制代码
[STAThread]
public static void Main(string[] args)
{
    // 实例化一个窗体
    MainWindow main = new MainWindow();
    LoginWindow login = new LoginWindow();
    if(login.ShowDialog() == true)
    {
        // 实例化一个应用程序
        Application app = new Application();
        // 应用程序运行时启动第一个窗体
        app.Run(main);
    }
}
相关推荐
wuty0071 小时前
完善基于WPF开发的标尺控件(含实例代码)
wpf·wpf标尺·支持横向竖向标尺·ruler
浩浩测试一下12 小时前
洪水猛兽攻击 Ddos Dos cc Drdos floods区别
安全·web安全·网络安全·系统安全·wpf·可信计算技术·安全架构
无心水14 小时前
分布式环境下定时任务与SELECT FOR UPDATE的陷阱与解决方案
分布式·后端·wpf·xxl-job·quartz·定时任务·selectforupdate
xdpcxq102915 小时前
Spring AOP + Guava RateLimiter 用注解实现优雅限流
spring·wpf·guava
Aevget1 天前
界面控件DevExpress WPF v25.2新版亮点:模板工具包全新升级
wpf·界面控件·devexpress·ui开发·.net 10
czhc11400756631 天前
wpf 129
wpf
码界奇点2 天前
基于eBPF技术的高性能网络防火墙系统设计与实现
开发语言·网络·毕业设计·php·wpf·go语言·源代码管理
cjp5603 天前
022.WPF 封装TextBox控件限制只输入数字自定义属性
wpf
cjp5603 天前
021.WPF 以MVVM模式控制combox控件显示/隐藏
wpf
小北方城市网3 天前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf