8天入门wpf—— 第一天 基础概念介绍

简介:

这些天从项目上接触到了wpf,感觉有必要做一个笔记,首篇还是聊聊基本的概念,要学习wpf,我们需要采用webform的思维来考虑问题。

一:App环境承载

我们都知道,console和winform程序的入口函数都是main,wpf同样也不例外,好了,我们新建一个wpf的程序,vs自动给我们生成了一个

MainWindow.xaml和App.xaml文件。

微软官方说wpf程序是从Application开始的,既然是开始总有个入口点吧,奇怪的是我们并没有发现Main函数,程序又是如何Run起来的呢?

其实,wpf为了简化我们的工作,把一些机械性的代码透明了,那么我们如何找到这个Main函数呢?很简单,我们编译一下程序,发现

App.xaml最后生成了App.g.cs的部分类,并且发现StartupUri是MainWindow.xaml,也就是说程序一运行,MainWindow.xaml将会启动。

二:Wpf中Application的生命周期

我们知道webform中的Global文件定义了一个应用程序的全局生命周期,或许有人问,生命周期能够干些什么,其实干的事情可多着呢,

比如我们可以做一些身份验证,或者一些信息的初始化,那么wpf中到底有哪些对应的方法和事件呢?

1:OnStartup方法 => Startup 事件

这个就见名识意了,也就是上面一幅图中的app.Run()的时候触发。

2: OnSessionEnding方法 => SessionEnding 事件

系统关机前调用。

3:OnExit方法 => Exit事件

应用程序关闭前调用。

4:OnActivated方法 => Activated 事件

应用程序获得焦点的时候触发。

5:OnDeactivated方法 => DeActivated事件

应用程序失去焦点的时候触发。


using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace Demo
{
 /// <summary>
 /// App.xaml 的交互逻辑
 /// </summary>
 public partial class App : Application
 {
 protected override void OnActivated(EventArgs e)
 {
 base.OnActivated(e);

 //TODO your code
 }

 protected override void OnDeactivated(EventArgs e)
 {
 base.OnDeactivated(e);

 //TODO your code
 }

 protected override void OnExit(ExitEventArgs e)
 {
 base.OnExit(e);

 //TODO your code
 }

 protected override void OnStartup(StartupEventArgs e)
 {
 base.OnStartup(e);

 //TODO your code
 }

 protected override void OnSessionEnding(SessionEndingCancelEventArgs e)
 {
 base.OnSessionEnding(e);
 
 //TODO your code
 }
 }
}

三:全局异常获取

在webform中的Global文件中有一个Application_Error方法,专门用来捕获整个应用程序的异常,以至于不会出现“黄白页”给用户,以此来提高

系统的健壮性和安全性,那么wpf中也有类似的方法吗?当然,wpf跟webform神似,他有的我也有,这里是一个DispatcherUnhandledException

事件,然后我们在OnStartup注册一下就Ok了。


namespace Demo
{
 /// <summary>
 /// App.xaml 的交互逻辑
 /// </summary>
 public partial class App : Application
 {
 protected override void OnStartup(StartupEventArgs e)
 {
 base.OnStartup(e);

 //注册Application_Error
 this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);

 }

 //异常处理逻辑
 void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
 {
 //处理完后,我们需要将Handler=true表示已此异常已处理过
 e.Handled = true;
 }
 }
}

好,下面我们做了示例:

首先我们拖一个button,事件处理中故意抛出异常。


namespace Demo
{
 /// <summary>
 /// MainWindow.xaml 的交互逻辑
 /// </summary>
 public partial class MainWindow : Window
 {
 public MainWindow()
 {
 InitializeComponent();
 }

 private void button1_Click(object sender, RoutedEventArgs e)
 {
 throw new Exception("我就害你,我就抛异常");
 }
 }
}


然后我们在Application_Error中进行处理,当然实际应用中应该是记一些log日志。


//异常处理逻辑
 void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
 {
 MessageBox.Show("谁tmd惹祸了:" + e.Exception.Message);

 //处理完后,我们需要将Handler=true表示已此异常已处理过
 e.Handled = true;
 }


最后看一下效果,注意,我们的程序并没有崩溃。


相关文章
|
3月前
|
C# 开发者 Windows
WPF 应用程序开发:一分钟入门
本文介绍 Windows Presentation Foundation (WPF),这是一种用于构建高质量、可缩放的 Windows 桌面应用程序的框架,支持 XAML 语言,方便 UI 设计与逻辑分离。文章涵盖 WPF 基础概念、代码示例,并深入探讨常见问题及解决方案,包括数据绑定、控件样式与模板、布局管理等方面,帮助开发者高效掌握 WPF 开发技巧。
170 65
|
4月前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
89 0
|
4月前
|
C# Windows IDE
WPF入门实战:零基础快速搭建第一个应用程序,让你的开发之旅更上一层楼!
【8月更文挑战第31天】在软件开发领域,WPF(Windows Presentation Foundation)是一种流行的图形界面技术,用于创建桌面应用程序。本文详细介绍如何快速搭建首个WPF应用,包括安装.NET Framework和Visual Studio、理解基础概念、创建新项目、设计界面、添加逻辑及运行调试等关键步骤,帮助初学者顺利入门并完成简单应用的开发。
143 0
|
前端开发 C# 数据库
WPF MVVM系统入门-下
本文详细讲解WPF,MVVM开发,实现UI与逻辑的解耦。
|
前端开发 数据可视化 C#
WPF MVVM系统入门-上
本文详细讲解WPF,MVVM开发,实现UI与逻辑的解耦。
|
Shell C# 调度
WPF PRISM开发入门一( 初始化PRISM WPF程序)
原文:WPF PRISM开发入门一( 初始化PRISM WPF程序) 这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识。目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码。
3759 0
C#编程-127:WPF初级入门
C#编程-127:WPF初级入门
C#编程-127:WPF初级入门
C#编程-127:WPF初级入门
C#编程-127:WPF初级入门
152 0
C#编程-127:WPF初级入门
|
C# 开发者 Windows
Silverlight与WPF开发人员入门应该知道的十件事
【CSDN 陈秋歌编译】微软开发者社区部门项目经理Pete Brown在纳什维尔DevLink 2010会议上做了一个名为“10件事”的演讲。这个演讲包含了Silverlight与WPF开发人员入门时应该了解的十件事。
1103 0
|
C# 图形学 容器
WPF PRISM开发入门二(Unity依赖注入容器使用)
原文:WPF PRISM开发入门二(Unity依赖注入容器使用) 这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用。我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下: 当前代码可以点击这里下载。
1945 0