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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM