C#WPF的App.xaml启动第一个窗体的3种方式
WPF的App.xaml启动第一个窗体的3种方式
1.使用App.xaml的StartupUri属性启动(推荐使用)
在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.cs的Startup事件中启动(推荐使用)
<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,获取启动参数。
缺点:
- 代码相对复杂,需要在代码后台显式创建和显示窗口。
- 需要正确处理窗口的显示方式(
Show或ShowDialog)。
3. 使用Application.Run方法启动:Main入口方法
在Main方法中直接创建Application实例,然后使用Run方法启动应用程序并显示主窗口。这种方法通常不推荐,因为它可能导致资源管理问题,特别是在多线程环境中。
优点:
- 提供了最大的灵活性,可以在应用程序启动前进行复杂的初始化操作。
缺点:
- 代码复杂,需要手动管理应用程序的生命周期。
- 可能导致资源管理问题,特别是在多线程环境中。
- 不符合WPF应用程序的标准模式,可能导致不可预测的行为。
总结
- 使用App.xaml的StartupUri属性是最简单的方法,适用于大多数标准WPF应用程序。
- 在App.xaml.cs的Startup事件中启动提供了更多的控制,适用于需要在窗口显示前进行复杂初始化的场景。
- 使用Application.Run方法启动虽然提供了最大的灵活性,但通常不推荐,因为它可能导致资源管理问题。
相关文章:
C#WPF的App.xaml启动第一个窗体的3种方式
WPF的App.xaml启动第一个窗体的3种方式 1.使用App.xaml的StartupUri属性启动(推荐使用) 在App.xaml文件中,你可以设置StartupUri属性来指定启动时显示的第一个窗口: <Application x:Class"浅看一眼WPF.App"xmlns&…...
【JAVA毕设】基于JAVA的酒店管理系统
一、项目介绍 本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router实现动态路由,Ajax实现前后端通信,Element-plus组件库使页面快速成型。后端部分:采用SpringBoot作为开发框架,同时集成MyBatis、Redis、…...
聚类--机器学习西瓜书阅读笔记(六)
无监督学习:通过对无标记训练样本的学习,揭示数据内在规律和性质。 聚类试图将数据集中的样本划分为若干不相交的子集,聚类过程自动形成簇结构,簇对应的语义需要子集命名把握。 聚类过程可以作为单独的过程,寻找数据…...
OpenHarmony(1)开发环境搭建
一:开源项目 OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台࿰…...
Triton服务在ASR语音识别系统中的实现
Triton服务在ASR语音识别系统中的实现 一、引言二、环境准备1. 硬件环境2. 软件环境 三、模型选择与训练1. 数据准备2. 模型架构3. 模型训练 四、模型转换与优化1. 模型转换2. 模型优化 五、配置Triton服务1. 安装Triton服务2. 创建模型仓库 一、引言 自动语音识别(…...
Typora一款极简Markdown文档编辑、阅读器,实时预览,所见即所得,多主题,免费生成序列号!
文章目录 Typora下载安装Typora序列号生成 Typora是一款Markdown编辑器和阅读器,风格极简,实时预览,所见即所得,支持MacOS、Windows、Linux操作系统,有图片和文字、代码块、数学公式、图表、目录大纲、文件管理、导入导…...
python机器人编程——用python调用API控制wifi小车的实例程序
目录 一、前言二、一个客户端的简单实现2.1 首先定义一个类及属性2.2 其次定义连接方法2.3 定义一些回调函数2.4 定义发送小车指令方法2.5 定义一个正常关闭方法 三、python编程控制小车的demo实现四、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源p…...
面试学习整理-线程池
线程池 简介JUC包线程池介绍线程池最常问也最常用-参数线程执行分析-线程是怎么运行的进程和线程的区别Executors工厂类提供四种线程池Executors和ThreaPoolExecutor创建线程池的区别两种提交任务的方法spring集成的线程池 简介 线程池作为实际使用和面试较多的技能区, 学习是…...
Debian会取代CentOS成为更主流的操作系统吗?
我们知道,其实之前的话,国内用户对centos几乎是情有独钟的偏爱,很多人都喜欢选择centos系统,可能是受到一些原因的影响导致的吧,比如他相当于免费的红帽子系统,或者一些教程和网上的资料都推荐这个系统&…...
网络安全领域推荐证书介绍及备考指南
在网络安全领域,拥有专业认证不仅可以证明个人的专业能力,还能帮助在实际工作中应用先进的技术和知识。以下是几种热门的网络安全证书介绍及备考指南。 1. OSCP (Offensive Security Certified Professional) 证书简介 OSCP是针对渗透测试领域的入门级…...
SpringBoot项目ES6.8升级ES7.4.0
SpringBoot项目ES6.8.15 升级到 ES7.4.0 前言 由于公司内部资产统一整理,并且公司内部部署有多个版本的es集群,所以有必要将目前负责项目的ES集群升级到公司同一版本7.4.0。es6到es7的升级变化还是挺大的,因此在这里做一下简单记录…...
深度学习 之 模型部署 使用Flask和PyTorch构建图像分类Web服务
引言 随着深度学习的发展,图像分类已成为一项基础的技术,被广泛应用于各种场景之中。本文将介绍如何使用Flask框架和PyTorch库来构建一个简单的图像分类Web服务。通过这个服务,用户可以通过HTTP POST请求上传花朵图片,然后由后端…...
MFC工控项目实例二十六创建数据库
承接专栏《MFC工控项目实例二十五多媒体定时计时器》 用选取的型号为文件名建立文件夹,再在下面用测试的当天的时间创建文件夹,在这个文件中用测试的时/分/秒为数据库名创建Adcess数据库。 1、在StdAfx.h文件最下面添加代码 #import "C:/Program F…...
springmvc源码流程解析(一)
Springmvc 是基于servlet 规范来完成的一个请求响应模块,也是spring 中比较大的一个 模块,现在基本上都是零xml 配置了,采用的是约定大于配置的方式,所以我们的springmvc 也是采用这种零xml 配置的方式。 要完成这种过程ÿ…...
【论文阅读】SRGAN
学习资料 论文题目:基于生成对抗网络的照片级单幅图像超分辨率(Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network)论文地址:https://arxiv.org/abs/1609.04802代码:GitHub - xiph/daala: Modern video compression for the interne…...
kubelet PLEG实现
概述 kubelet的主要作用是确保pod状态和podspec保持一致,这里的pod状态包括pod中的container状态,个数等。 为了达到这个目的,kubelet需要从多个来源watch pod spec的变化,并周期从container runtime获取最新的container状态。比如…...
leetcode49:字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &…...
一个将.Geojson文件转成shapefile和kml文件的在线页面工具(续)
接上一专栏:这个网址有个bug,每个月只能免费转3次,这等于没用! 一个将.Geojson文件转成shapefile和kml文件的在线页面工具_geojson转shp在线-CSDN博客 下面这个网址实测可以免费多次转换! Quickmaptools : Geojson to…...
论文阅读(二十四):SA-Net: Shuffle Attention for Deep Convolutional Neural Networks
文章目录 Abstract1.Introduction2.Shuffle Attention3.Code 论文:SA-Net:Shuffle Attention for Deep Convolutional Neural Networks(SA-Net:置换注意力机制) 论文链接:SA-Net:Shuffle Attention for Deep Convo…...
基于YOLOv8深度学习的智能道路裂缝检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】
背景及意义 智能道路裂缝检测与分析系统在基础设施维护和安全监测方面起着非常重要的作用。道路裂缝是道路衰老和破坏的早期迹象,若不及时发现和修复,可能会导致道路结构的进一步恶化,甚至引发安全事故。本文基于YOLOv8深度学习框架ÿ…...
小波散射网络:从理论优势到小样本图像分类实践
1. 小波散射网络为什么值得关注 第一次听说小波散射网络时,我和大多数搞机器学习的朋友反应一样:"这玩意儿和普通卷积神经网络(CNN)有什么区别?"直到去年接手一个医疗影像项目,手头只有200张标注…...
NextPy全栈框架:用Python构建AI智能体Web应用
1. 项目概述:当AI智能体遇上全栈Web开发最近在开源社区里,一个名为dot-agent/nextpy的项目引起了我的注意。作为一名长期在Web开发和AI应用落地之间“反复横跳”的开发者,我深知将AI能力,特别是智能体(Agent࿰…...
JD-GUI深度解析:Java字节码逆向工程的瑞士军刀
JD-GUI深度解析:Java字节码逆向工程的瑞士军刀 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 在Java开发的世界里,我们常常需要面对只有字节码没有源码的困境——第三方库的调试…...
如何快速清理重复图片:AntiDupl.NET智能去重工具的完整指南
如何快速清理重复图片:AntiDupl.NET智能去重工具的完整指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾因硬盘空间被重复图片悄无声息地吞噬而…...
别再在循环里写Thread.sleep()了!IntelliJ IDEA这个告警到底在说什么?
循环中的Thread.sleep():为什么IntelliJ IDEA警告你正在"忙等待"? 在IntelliJ IDEA中编写Java代码时,你是否遇到过这样的警告:"Call to Thread.sleep() in a loop, probably busy-waiting"?这个看…...
如何免费使用GanttProject:开源项目管理软件的完整入门指南
如何免费使用GanttProject:开源项目管理软件的完整入门指南 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 你是否正在寻找一款功能强大且完全免费的项目管理工具?…...
【DSP学习】外部中断实验-基于普中DSP28335开发攻略
参考材料 普中DSP28335开发攻略 一、外部中断配置 1 失能 CPU 级中断,并初始化 PIE 控制器寄存器和 PIE 中断向量表在前面学习中断章节中,我们知道 F28335 的外设中断需通过 PIE 控制器来管理,因此需要初始化 PIE 相应的寄存器和中断向量表。…...
FPGA实战:基于Verilog的正交调制解调系统设计与仿真验证
1. 正交调制解调系统基础认知 第一次接触正交调制解调时,我也被那些数学公式绕得头晕。后来发现,用日常生活中的例子理解会简单很多——就像两个人同时往同一个方向扔球(I路和Q路信号),接收端需要准确接住这两个球并还…...
Taotoken CLI工具一键配置开发环境与团队密钥共享指南
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken CLI工具一键配置开发环境与团队密钥共享指南 在团队协作开发中,统一大模型API的接入配置是一个常见痛点。每位…...
NotebookLM无法识别PDF表格?手把手复现Google Research 2024最新LayoutParser适配方案(附可运行Colab脚本)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM无法识别PDF表格?手把手复现Google Research 2024最新LayoutParser适配方案(附可运行Colab脚本) NotebookLM 默认使用轻量级 PDF 解析器(如 Py…...
