Avalonia系列文章之小試牛刀

最近有朋友反饋,能否分享一下Avalonia相關的文章,于是就抽空學習了一下,發現Avalonia真的是一款非常不錯的UI框架,值得花時間認真學習一下,于是邊學習邊記錄,整理成文,分享給大家,希望可以一起學習,共同進步。

什么是Avalonia?

Avalonia是一款開源的跨平臺UI框架,它是.NET基金會的一部分,專為創建靈活且美觀的用戶界面而設計。Avalonia 支持多種應用程序開發平臺,包括 Windows、Linux、macOS、iOS、Android 和 WebAssembly。同時Avalonia基于現代.NET技術棧,后臺允許采用C#或其他.NET語言編寫代碼,UI頁面采用XAML語言,同樣兼容WPF的樣式系統,布局系統和綁定基礎設施模型,之前學習WPF的同學可以無縫銜接,幾乎是零成本學習。

Avalonia的特點

通過與其他UI框架進行對比,Avalonia具有如下特點:

  • 跨平臺設計:與 WPF 專為 Windows 開發不同,Avalonia 是從一開始就被設計為跨平臺框架。它支持 Windows、Linux、macOS、iOS、Android、WebAssembly 等多個平臺,能夠在所有這些平臺上提供一致的外觀和體驗。
  • 獨立渲染:Xamarin.Forms 依賴目標平臺的原生控件進行渲染,而 Avalonia 擁有自己的渲染引擎。這意味著它不使用操作系統的原生 UI 控件,而是自己繪制整個用戶界面。這提供了高度的靈活性和自定義能力。
  • 靈活的樣式系統:Avalonia 使用類似于 WPF 的強大樣式系統。它使用樣式來定義控件的外觀,與 Xamarin.Forms 不同,這些樣式可以根據控件狀態動態調整,并且可以在繼承層次結構中繼承。
  • XAML 和 code-behind: 與 WPF 和 Xamarin.Forms 一樣,Avalonia 允許您使用 XAML 定義用戶界面,這是許多 .NET 開發人員熟悉的標記語言。您還可以直接在代碼中操作用戶界面,使您能夠選擇適合您的應用程序的正確方法。
  • 開源和社區驅動:Avalonia 是一個開源項目,擁有活躍的社區為其開發做出貢獻。這意味著它會根據社區的反饋和需求不斷發展和改進。

環境安裝

正所謂“工欲善其事,必先利其器”使用Avalonia之前需要先安裝UI模板和插件,才能夠創建Avalonia項目。

1. 安裝模板

AvaloniaUI模板,可以通過運行如下命令進行安裝:

dotnet new install Avalonia.Templates
打開命令行窗口,然后輸入安裝UI模板命令,進行安裝,如下所示:

2.安裝Avalonia擴展

在Visual Studio 2022中,安裝基于Avalonia的擴展,首先打開Visual Studio 2022,然后點擊“擴展(X)”菜單,再點擊“管理擴展(M)”子菜單,打開管理擴展窗口,在“管理擴展”窗口搜索關鍵字“Avalonia”,在擴展列表中選擇“Avalonia for Visual Studio 2022”進行下載即可,如下所示:

然后在彈出的安裝向導中,點擊"Modify",同意協議并進行安裝,如下所示:

等待安裝擴展

安裝完成

創建Avalon項目

環境配置好以后,就可以創建項目啦,首先打開Visual Studio,創建項目,在項目模板頁面的搜索框輸入“Avalonia”就可以看到已經安裝的Avalonia模板,然后選擇“Avalonia C# Project”,點擊“下一步”,如下所示:

在項目配置頁面,輸入項目名,此處為“FirstAvalonia”,然后點擊“創建”按鈕,如下所示:

在彈出的New App頁面選擇目標平臺,和設計模式,然后點擊“創建”,如下所示:

創建成功后,解決方案中包含兩個項目,其中“FirstAvalonia”是在每個平臺之間共享的主要項目,“FirstAvalonia.Desktop”是針對桌面平臺的特定項目,如下所示:

項目運行

在創建項目后,將“FirstAvalonia.Desktop”設置為啟動項目,然后點擊Visual Studio 工具欄中的運行按鈕或者F5快捷鍵,進行啟動程序。

若是報“當前 .NET SDK 不支持將 .NET 8.0 設置為目標。請將 .NET 7.0 或更低版本設置為目標,或使用支持 .NET 8.0 的 .NET SDK 版本。 ”錯誤,表示Visual Studio 2022未安裝.NET 8.0,如下所示:

可以選擇項目,然后點擊右鍵,在屬性配置頁面修改程序的目標框架,如下所示:

重新運行項目,如下所示:

當看到Welcome to Avalonia,恭喜你,第一Avalonia項目運行成功啦!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66602.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66602.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

10 為什么系統需要引入分布式、微服務架構

java技術的發展 在java開始流行起來之后,主要服務于企業家應用,例如ERP,CRM等等,這些項目是為企業內部員工使用,我們的思維是怎么用設計模式,如何封裝代碼。讓開發人員關注到業務上去,系統也就那么幾十幾百…

第6章:Python TDD實例變量私有化探索

寫在前面 這本書是我們老板推薦過的,我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后,我突然思考,對于測試開發工程師來說,什么才更有價值呢?如何讓 AI 工具更好地輔助自己寫代碼,或許…

JDK 23 和 JDK 21 的區別

JDK 23 和 JDK 21 的區別主要在于支持周期和功能特性: 支持周期: JDK 23:此版本是一個常規發布版本,支持時間較短,通常是六個月。這種版本適合希望使用最新特性和改進的用戶。JDK 21:這是一個長期支持&…

springboot自動配置原理(高低版本比較)spring.factories文件的作用

SpringBootApplication public class SpringSecurityApplication {public static void main(String[] args) {SpringApplication.run(SpringSecurityApplication.class, args);}}注解SpringBootApplication Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Doc…

使用Websocket進行前后端實時通信

1、引入jar&#xff0c;spring-websocket-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2、配置websocket config import org.springframe…

vue2 - Day05 - VueX

Vuex 是 Vue.js 官方的狀態管理庫。它是一個讓你能在應用中集中管理共享狀態的工具。當應用的規模逐漸增大&#xff0c;組件之間的數據傳遞變得越來越復雜時&#xff0c;Vuex 就成為了救星&#xff0c;提供了一個集中式的存儲來管理所有的組件狀態&#xff0c;并且保證狀態以一…

中型項目中 HTTP 的挑戰與解決方案

一、引言 在當今數字化時代&#xff0c;HTTP&#xff08;超文本傳輸協議&#xff09;作為Web應用程序的基礎通信協議&#xff0c;在中型項目的開發中扮演著至關重要的角色。它為客戶端和服務器之間的數據傳輸提供了標準規范&#xff0c;使得各種類型的應用&#xff0c;從簡單的…

IDEA導入Maven工程不識別pom.xml

0 現象 把阿里 sentinel 項目下載本地后&#xff0c;IDEA 中卻沒顯示 maven 工具欄。 1 右鍵Maven Projects 點擊IDEA右側邊欄的Maven Projects&#xff0c;再點擊&#xff1a; 在出現的選擇框中選擇指定的未被識別的pom.xml即可&#xff1a; 2 Add as maven project 右鍵p…

VUE學習筆記(入門)5__vue指令v-html

v-html是用來解析字符串標簽 示例 <!doctype html> <html lang"en"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…

OSPF的LSA的學習研究

OSPF常見1、2、3、4、5、7類LSA的研究 1、拓撲如圖&#xff0c;按照地址表配置&#xff0c;激活OSPF劃分相關區域并宣告相關網段 2、1類LSA&#xff0c;每臺運行了OSPF的路由器都會產生&#xff0c;描述了路由器的直連接口狀況和cost 可以看到R1產生了一條router lsa&#xff0…

小結:OSPF協議的工作原理

OSPF&#xff08;開放最短路徑優先&#xff09;優點&#xff1a; 快速收斂&#xff1a;OSPF的收斂速度較快&#xff0c;能迅速響應網絡拓撲變化&#xff0c;并在發生故障后快速更新路由信息。 支持大規模網絡&#xff1a;OSPF適合大型網絡&#xff0c;可以通過劃分區域來減少網…

TypeScript - 利用GPT輔助學習

TypeScript 一、基礎1. 安裝 TypeScript2. 創建你的第一個 TypeScript 文件3. 編譯 TypeScript 代碼4. 變量聲明與類型注解5. 函數與類型注解6. 總結 二、進階常用類型1. 類型別名2. 對象類型3. 類型斷言4.typeof 操作符 高級類型1. 類2. 交叉類型3. 泛型與 keyof4. 索引簽名類…

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一種協議&#xff0c;用于在Web應用程序和服務器之間建立實時、雙向的通信連接。它通過一個單一的TCP連接提供了持久化連接&#xff0c;這使得Web應用程序可以更加實時地傳遞數據。WebSocket協議最初由W3C開發&#xff0c;并于2…

stm32 no connect target

解決 STM32 報錯 “no target connected” 的方法 前言 stm32最小系統在下載程序是一直報錯&#xff1a;no target connected&#xff0c;試了很多辦法成功不了&#xff0c;最后將芯片擦除了才成功。 一、問題描述 當時是寫flash的時候寫到ST Link 存儲的地方了。 之后就不…

element的el-form-item的prop作用

這個在elemenui中介紹比較簡單&#xff0c;一般寫的時候照著例子寫&#xff0c;會正常運行。沒太注意porp到底有啥影響點。這次有點時間整理一下。 這個https://worktile.com/kb/p/3534641鏈接講述的要比一般csdn上的文章清晰。 總結&#xff1a; Vue表單驗證中的prop屬性用于指…

Open3D計算點云粗糙度(方法一)【2025最新版】

目錄 一、Roughness二、代碼實現三、結果展示博客長期更新,本文最近更新時間為:2025年1月18日。 一、Roughness 通過菜單欄的Tools > Other > Roughness找到該功能。 這個工具可以估計點云的“粗糙度”。 選擇一個或幾個點云,然后啟動這個工具。 CloudCompare只會詢問…

窺探QCC518x/308x系列與手機之間的藍牙HCI記錄與分析 - 手機篇

今天要介紹給大家的是, 當我們在開發高通耳機時如果遇到與手機之間相容性問題, 通常會用Frontline或Ellisys的Bluetooth Analyzer來截取資料分析, 如果手邊沒有這樣的儀器, 要如何窺探Bluetooth的HCI log.這次介紹的是手機篇. 這次跟QCC518x/QCC308x測試的手機是Samsung S23 U…

【論文投稿】Python 網絡爬蟲:探秘網頁數據抓取的奇妙世界

目錄 前言 一、Python—— 網絡爬蟲的絕佳拍檔 二、網絡爬蟲基礎&#xff1a;揭開神秘面紗 &#xff08;一&#xff09;工作原理&#xff1a;步步為營的數據狩獵 &#xff08;二&#xff09;分類&#xff1a;各顯神通的爬蟲家族 三、Python 網絡爬蟲核心庫深度剖析 &…

前端炫酷動畫--圖片(一)

目錄 一、四角線框的跟隨移動 二、元素倒影(-webkit-box-reflect) 三、模特換裝(maskblend) 四、元素平滑上升 五、無限視差滾動 六、判斷鼠標進入方向(輪播方向) 七、環形旋轉效果 八、黑白小球交替旋轉 九、hover時圓形放大 十、畫一棵隨機樹(canvas) 十一、代碼雨…

STL--list(雙向鏈表)

目錄 一、list 對象創建 1、默認構造函數 2、初始化列表 3、迭代器 4、全0初始化 5、全值初始化 6、拷貝構造函數 二、list 賦值操作 1、賦值 2、assign&#xff08;迭代器1&#xff0c;迭代器2&#xff09; 3、assign&#xff08;初始化列表&#xff09; 4、assig…