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