使用.Net Core开发WPF App系列教程( 一、.Net Core和WPF介绍)

使用.Net Core开发WPF App系列教程

一、.Net Core和WPF介绍

二、在Visual Studio 2019中创建.Net Core WPF工程

三、与.Net Framework的区别

四、WPF中的XAML

五、WPF中的布局

六、WPF中的常用控件(上)


 

.Net Core介绍

.NET Core 是一个通用的开放源代码开发平台。 可以使用多种编程语言针对 x64、x86、ARM32 和 ARM64 处理器创建适用于 Windows、macOS 和 Linux 的 .NET Core 应用。 .Net CoreIoT客户端 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 BasicF#语言来编写库和应用程序

在后面的文章中,会使用C#语言进行演示。如果你还不了解C#语言,可以访问以下链接进行学习

https://docs.microsoft.com/en-us/dotnet/csharp/

 

.Net Core 3.0起,.Net Core支持开发桌面应用程序。包括WPFWinform

使用.Net Core开发WPF应用程序,需要Visual Studio 2019 16.3及以上版本

可以访问以下链接下载Visual Studio 2019 Community版本(免费)

https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=16#

 

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目前已经开源,项目地址

https://github.com/dotnet/wpf 

WPF未来发展路线

https://github.com/dotnet/wpf/blob/master/roadmap.md

 

WPF的功能和特性:

1、使用XAML标记语言来构建界面

2、前后端分离,使用C#语言作为后台逻辑代码语言。

3、控件

功能性 控件
按钮 Button RepeatButton
数据 DataGrid ListView TreeView
日期 Calendar DatePicker
对话框 OpenFileDialog PrintDialog SaveFileDialog
数字墨迹 InkCanvas InkPresenter
文档 DocumentViewer FlowDocumentPageViewer FlowDocumentReader FlowDocumentScrollViewer  StickyNoteControl
输入 TextBox RichTextBox PasswordBox
布局 Border BulletDecorator Canvas DockPanel Expander Grid GridView GridSplitter GroupBox Panel ResizeGrip Separator ScrollBar ScrollViewer StackPanel Thumb Viewbox VirtualizingStackPanel Window WrapPanel
媒体 Image MediaElement SoundPlayerAction
菜单 ContextMenu Menu ToolBar
导航  Frame Hyperlink Page NavigationWindow TabControl
选项 CheckBox ComboBox ListBox RadioButton Slider
信息 AccessText Label Popup ProgressBar StatusBar TextBlock ToolTip

 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示例程序)

posted @ 2020-07-28 09:00  zhaotianff  阅读(2653)  评论(0编辑  收藏