.NET界面組件WinFormedge
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
經(jīng)過幾個月的爆肝,目前 WinFormedge 項(xiàng)目已經(jīng)基本可用并已上傳至 NuGet 源。同時(shí)附帶的示例程序也開發(fā)完成并隨 WinFormedge 源代碼一并開源。歡迎各位以 Win10/11 為主要生產(chǎn)環(huán)境的 .NET 開發(fā)人員安裝體驗(yàn)。 項(xiàng)目簡介WinFormedge 是一個基于 Microsoft WebView2 的開源 .NET 庫,開發(fā)者能夠使用 HTML、CSS 和 JavaScript 創(chuàng)建現(xiàn)代化、具有豐富視覺吸力的 WinForms 應(yīng)用程序。此項(xiàng)目的靈感源于由本人維護(hù)的另外一個 .NET WinForm 界面組件 NanUI,與之不同的是 NanUI 基于 Chromium Embedded Framework (CEF) 作為 Web 的渲染引擎,而 WinFormedge 使用了 WebView2 作為渲染引擎,因此 WinFormedge 在目標(biāo)為 Windows 10/11 的設(shè)備上部署時(shí)無需打包龐大的 CEF 運(yùn)行時(shí)文件,極大地減少了應(yīng)用程序分發(fā)包的大小。 功能WinFormedge 的目標(biāo)是為 .NET 桌面開發(fā)人員提供功能強(qiáng)大且使用便捷的界面組件,目標(biāo)針對 WinForm 框架,因此使用 WinFormedge 界面框架能夠在為 WinForm 項(xiàng)目帶來全新界面體驗(yàn)的同時(shí)也保留了 .NET 的強(qiáng)大功能。 窗體樣式WinFormedge 目前提供了標(biāo)準(zhǔn)窗體樣式、無標(biāo)題欄窗體樣式及透明窗體三種類型的窗體: 標(biāo)準(zhǔn)窗體樣式 標(biāo)準(zhǔn)窗體樣式與 WinForm 的標(biāo)準(zhǔn)窗體相同,支持最小化、最大化、關(guān)閉等操作。不同的是,整個客戶區(qū)將以開發(fā)者設(shè)計(jì)的 Web 頁面所覆蓋,當(dāng)然也可以如下圖所示直接使用現(xiàn)有的 Web 站點(diǎn)。 無標(biāo)題欄窗體樣式 無標(biāo)題欄窗體去除了系統(tǒng)標(biāo)題欄,允許開發(fā)者使用整個窗口區(qū)域這能為界面的設(shè)計(jì)帶來極大的靈活性。如圖所展示的 WinFormedge 示例程序,窗體移除了系統(tǒng)標(biāo)準(zhǔn)標(biāo)題欄區(qū)域,使用整個 HTML 頁面來展現(xiàn)軟件的界面。 透明窗體樣式 透明窗體允許開發(fā)者創(chuàng)建完全透明的窗體,適用于需要特殊視覺效果的應(yīng)用程序。下圖所展示的窗體,在 Windows 系統(tǒng)中使用 HTML 模擬了 macOS Yosemite 的窗體風(fēng)格,因?yàn)槭褂昧?WinFormedge 的透明窗體,因此從窗體的圓角效果、投影效果等等都完全使用 HTML 和 CSS 來實(shí)現(xiàn)。 通過調(diào)整背景的 Alpha 通道也能實(shí)現(xiàn)更多酷炫的透明和半透明效果。 背景樣式此外,WinFormege 還內(nèi)置了多種窗體背景的樣式,包括傳統(tǒng)的純色背景、透明背景、類似 Win7 的高斯模糊背景以及 Win11 的 Mica 背景等。開發(fā)者可以根據(jù)需要選擇合適的背景樣式,配合 WebView2 的頁面設(shè)計(jì)以實(shí)現(xiàn)不同的視覺效果。 交互功能為了簡化 Web 前端與 WinForm 的功能交互,WinFormege 提供了多種內(nèi)置的命令及 CSS 幫助類以減少開發(fā)者的開發(fā)難度,這些功能包括: 窗體命令窗體命令 app-command 屬性是 WinFormedge 擴(kuò)展的 HTML 元素屬性,通過在標(biāo)準(zhǔn)的 HTML 元素上添加這個元素屬性以方便地實(shí)現(xiàn)窗體的最小化、最大化、全屏及關(guān)閉操作。
用法其實(shí)很簡單,在任意 HTML 元素上加上這個屬性并配置期望的操作類型即可:
移動無邊框窗體當(dāng)使用無標(biāo)題欄或者透明窗體時(shí),WinFormedge 提供了能夠幫助窗體實(shí)現(xiàn)點(diǎn)擊移動的 app-region 屬性,這個屬性是一個 CSS 的屬性,具有兩個屬性值 drag 和 no-drag,將這個 CSS 屬性應(yīng)用到合適的元素上即可實(shí)現(xiàn)對窗體的拖動移動。 如下所示:
HTML 幫助樣式為了簡化前端頁面開發(fā)人員的工作,WinFormedge 會在頁面的 HTML 根元素上根據(jù)窗體的狀態(tài)標(biāo)記上不同的 class 類名:
通過以上幫助樣式,設(shè)計(jì)人員能夠?yàn)榇绑w在不同窗體狀態(tài)時(shí)編寫對應(yīng)的 CSS 樣式代碼。 前端事件WinFormedge 提供了一些前端事件,允許開發(fā)者在窗體狀態(tài)變化時(shí)執(zhí)行 JavaScript 代碼。開發(fā)者通過使用 window.addEventListener 方法來綁定這些事件。目前提供對以下事件的監(jiān)聽:
這些事件類型是 CustomEvent,因此需要通過事件參數(shù)的 detail 屬性訪問到具體的熟悉值。 前端對象WinFormedge 提供了一個全局的 window.hostWindow 對象,允許開發(fā)者訪問窗體的相關(guān)信息和操作。該對象包含以下屬性和方法:
安裝和使用安裝WinFormedge 已在 github 設(shè)置了自動化 nuget 發(fā)布,您能夠從 nuget 找到最新版的 WinFormedge 包。使用 NuGet 包管理器或者任意 NuGet 管理工具在您的項(xiàng)目中搜索并安裝WinFormedge即可。
入門首先您需要使用 Visual Studio 2022 使用默認(rèn)的項(xiàng)目模板創(chuàng)建一個 .NET 的 Windows 窗體應(yīng)用程序。 然后根據(jù)以下步驟修改和編寫應(yīng)用程序代碼: 使用 WinFormedge 應(yīng)用程序初始化流程替換默認(rèn)初始化代碼 在 program.cs 文件中,您應(yīng)使用 FormedgeApp 替代 Application 類來初始化 WinForm 應(yīng)用程序。FormedgeApp 類是用于創(chuàng)建 WinFormedge 應(yīng)用程序的構(gòu)建器,提供了配置和運(yùn)行應(yīng)用程序的方法。
當(dāng) FormedgeApp 類創(chuàng)建后,它將自動初始化 WebView2 環(huán)境并運(yùn)行消息循環(huán)。 創(chuàng)建 AppStartup 類 AppStartup 類是 WinFormedge 應(yīng)用程序的入口點(diǎn),提供了配置應(yīng)用程序的方法。您可以重寫 OnApplicationLaunched 方法以在應(yīng)用程序啟動前執(zhí)行初始化任務(wù)。 您必須實(shí)現(xiàn) OnApplicationStartup 方法來創(chuàng)建應(yīng)用程序的主窗口。當(dāng)該方法返回由 StartupSettings 類生成的值時(shí),F(xiàn)ormedgeApp 類將創(chuàng)建應(yīng)用程序主窗口;若方法返回 null,則應(yīng)用程序?qū)⒅苯雨P(guān)閉。
您可以在 OnApplicationStartup 方法中執(zhí)行一些操作,例如用戶登錄、用戶設(shè)置等,以決定使用哪個窗口啟動應(yīng)用程序。此外,如果條件不滿足,您還可以通過返回 null 來終止應(yīng)用程序。 創(chuàng)建 MainWindow 類 MyWindow 類是應(yīng)用程序的主窗口,繼承自 Formedge 類。您可以使用 Formedge 類創(chuàng)建一個帶有 WebView2 的窗口。
上述代碼創(chuàng)建了一個 Formedge 窗口。通過使用 Url 屬性,您可以設(shè)置窗口的初始 URL。 默認(rèn)窗口屬性可以在構(gòu)造函數(shù)中設(shè)置。對于窗口的特殊樣式屬性,您需要重寫 Formedge 類的 ConfigureHostWindowSettings 方法,并使用其 HostWindowBuilder 參數(shù)來確定將采用哪種窗口樣式,以及配置該窗口具有的特殊樣式。例如,在示例代碼中,通過使用 HostWindowBuilder 參數(shù)的 UseDefaultWindow 方法,您可以指示 Formedge 創(chuàng)建一個默認(rèn)窗口,并設(shè)置其 ExtendsContentIntoTitleBar 屬性以實(shí)現(xiàn)無邊框效果。 當(dāng)窗口和 WebView2 準(zhǔn)備就緒時(shí),會觸發(fā) Load 事件。您可以使用此事件執(zhí)行任何需要 WebView2 控件準(zhǔn)備就緒的初始化任務(wù)。 運(yùn)行應(yīng)用程序 項(xiàng)目倉庫Github: https://github.com/XuanchenLin/WinFormedge 目前 WinFormedge 項(xiàng)目已在 Github 和 Gitee 進(jìn)行托管,并使用 MIT 開源協(xié)議開放源代碼,歡迎各位 .NET 開發(fā)者安裝體驗(yàn)。 歡迎到倉庫的 Issues 頁面發(fā)表建議或意見,同時(shí)也歡迎任何有意義的 PR。 ?轉(zhuǎn)自https://www.cnblogs.com/linxuanchen/p/18924815 該文章在 2025/9/9 10:19:34 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |