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