使用.Net Core开发WPF App系列教程( 一、.Net Core和WPF介绍)
.Net Core介绍
.NET Core 是一个通用的开放源代码开发平台。 可以使用多种编程语言针对 x64、x86、ARM32 和 ARM64 处理器创建适用于 Windows、macOS 和 Linux 的 .NET Core 应用。 .Net Core为云、IoT、客户端 UI 和机器学习提供了框架和 API。
相比于.Net Framework,它有以下区别
1、开源,这也就意味着.Net Core的更新周期会比.Net Framework要短。
2、采用包化 (Packages) 的管理方式,根据应用程序决定需要什么包。应用程序只需使用Nuget获取需要的包即可。
3、跨平台(但这一点对WPF来说不适用,目前WPF还不支持跨平台)。
4、更加的现代化以及性能更高。
可访问以下链接获取详细的.Net Core介绍
https://docs.microsoft.com/en-us/dotnet/core/introduction
.Net Core支持使用C#、Visual Basic 和 F#语言来编写库和应用程序
在后面的文章中,会使用C#语言进行演示。如果你还不了解C#语言,可以访问以下链接进行学习
https://docs.microsoft.com/en-us/dotnet/csharp/
从.Net Core 3.0起,.Net Core支持开发桌面应用程序。包括WPF和Winform。
使用.Net Core开发WPF应用程序,需要Visual Studio 2019 16.3及以上版本
可以访问以下链接下载Visual Studio 2019 Community版本(免费)
WPF介绍
WPF(Windows Presentation Foundation)是用于Windows的现代图形显示系统,使用WPF可以创建适用于Windows平台的具有非凡视觉效果的桌面应用程序。
WPF的底层图形技术使用了DirectX,而不是GDI/GDI+。这就意味的WPF在渲染图形时,会尽可能将处理工作交给GPU去处理,渲染的速度会更快,效果也会更好。WPF设计的出发点就是充分利用现代图形硬件。
WPF具有分辨率无关性,WPF会根据系统DPI进行缩放。(如何在Windows10系统中修改DPI设置,可参考以下链接https://support.corel.com/hc/en-us/articles/115001485408-Display-Options-How-to-change-DPI-Scaling-Level-for-displays-in-Windows-10-)
WPF目前已经开源,项目地址
WPF未来发展路线
https://github.com/dotnet/wpf/blob/master/roadmap.md
WPF的功能和特性:
1、使用XAML标记语言来构建界面
2、前后端分离,使用C#语言作为后台逻辑代码语言。
3、控件
WPF内置控件
4、输入和命令系统
5、布局
6、数据绑定
7、图形(包括二维和三维图形)
8、动画
9、图像、视频和音频支持
10、文字和排版
11、内容模型
12、触发器
13、控件模板
14、数据模板
15、样式
16、资源
17、自定义控件
WPF体系结构:
体系结构说明:
PresentationFramework.dll
包含WPF顶层的类型。包括窗口、面板以及控件等。它还实现了高层编程抽象,如样式。平常我们使用的大部分类都来自这个程序集。
PresentationCore.dll
包含了基础类型,如UIElement类和Visual类,所有形状类和控件类都继承自这两个类。
WindowsBase.dll
包含了更多基本要素,如DispatcherObject和DependencyObject类,这两个类实现了依赖属性
milcore.dll
WPF渲染系统的核心,也是媒体集成层(Media Integration Layer)的基础。它将可视化元素转换为DirectX所需要的三角形和纹理。milcore.dll也是操作系统的一部分,DWM使用milcore.dll来渲染桌面。(不得不说,这一点很强)
WindowsCodecs.dll
提供图像处理支持的低级API(如处理、显示以及缩放常用图像格式)
DirectX
一套多媒体编程接口。WPF应用程序中的所有图形都由它进行渲染
User32
用于决定应用程序实际占用桌面的哪一部分(在Winform中,该库还用于渲染图像)
WPF类层次结构:
System.Threading.DispathcerObject类
大部分的WPF对象都是继续自 DispatcherObject,它提供了并发和多线程的基本构造。WPF应用程序使用(STA Single-Thread Affinity)模型,这意味着整个界面由单个线程拥有。从另一个线程与UI交互是不安全的。通过从派生 DispatcherObject ,你可以创建一个具有 STA 行为的 CLR 对象,并在创建时为其提供指向调度程序的指针。
System.Windows.DependencyObject类
在WPF中,主要通过属性与UI元素进行交互。不同于CLR属性,WPF中实现了自己的一套属性系统--依赖属性。通过继承DependencyObject类,可以获得对依赖属性的支持
System.Windows.Media.Visual类
在WPF窗口中显示的每个元素本质上都是Visual对象。可将Visual类视为绘图对象,其中封装了绘图指令。Visual类还在托管的WPF库和非托管库milcore.dll之间提供了链接,任何继承自Visual的类都能在窗口上显示出来。
System.Windows.UIElement类
UIElement定义包含布局、输入和事件的核心子系统。
System.Windows.FrameworkElement类
提供WPF元素的属性、事件和方法的框架级别集。FrameworkElement类实现了一些全部由UIElement类定义的成员。例如UIElement类为WPF布局系统提供了基础,但FrameworkElement类提供了支持它的重要属性(如HorizontalAlginment、Margin属性等等)。
System.Windows.Shapes.Shape类
基本的形状类(如Rectangle,Polygon,Ellipse,Line,Path类)都继承自该类
System.Windows.Controls.Control类
WPF中的控件类,控件是可与用户交互的元素,如Button,Label,ListBox类等。
说明:在WPF中,可视化内容被称为元素(element),只有部分元素是控件(能够接收焦点并能与用户进行交互的元素)。许多元素是在System.Windows.Controls命名空间中定义的,但它不是继承自System.Windows.Controls.Control类,并且不被认为是控件,如Panel类
System.Windows.Controls.ContentControl类
ContentControl类是所有具有单一内容控件的基类,控件中的单一内容可以是普通字符串,也可以是拥有各种控件组合的布局面板
System.Windows.Controls.ItemsControl类
ItemControl类是所有选项集合控件的基类,如ListBox,TreeView等
System.Windows.Control.Panel类
Panel类是所有布局窗口的基类,布局容器可以包含一个或多个子元素,而且可以对子元素进行特定规则排列。
推荐阅读
https://github.com/Microsoft/WPF-Samples(Microsoft官方的WPF示例程序)