WPF 最簡方法使用自己定製的 WPF 框架
本文提供了一個最簡的方法,可以用到整個 WPF 框架裡面所有 internal 內部許可權的成員的方法。這是一個我自己定製的 WPF 框架,可以在此基礎上構建屬於自己的定製化的 WPF 框架
本文提供的方法適用於 .NET 5 和 x86 下,如果需要其他版本,請自行構建和使用,關於如何自行構建和定製化,請看 手把手教你構建 WPF 框架的私有版本
現在的 WPF 屬於 dotnet 基金會組織下的一個開源倉庫,基於 MIT 協議,意味著我可以進行魔改然後私有釋出甚至不再公開原始碼商業使用。而 WPF 是一個跨了很多代技術的框架,在 WPF 倉庫裡面既可以看到最新的 .NET 5 的程式碼也可以看到上古的 Perl 的構建程式碼。這樣就會存在一個問題,本地構建難度很高,除錯難度也很高。想要在本地構建出來,需要自己的裝置的網路能訪問世界上任意的網路。而如果想要在 VisualStudio 上直接構建出來,那就需要很多 msbuild 的預編譯知識,和一些引用關聯知識,雖然不難,但是知識量還是擺在這裡的
於是此時的給 WPF 框架開發的勸退力就太足了,想要自己定製化屬於自己的 WPF 框架難度有點大,至少我每次定製化的步驟都有點多。因此我就在摸索最佳實踐,找到了最簡的方法,請看下文
先不聊啥原理,原理部分我將會放在其他的部落格裡面,原因是原理太多了
使用本文的方法能實現的是,在我提供的程式集裡面,可以訪問到 WPF 框架裡面所有 internal 內部許可權的成員。限制是只適用於 .NET 5 和 x86 下,如需有其他定製還請閱讀我的原理部落格,或者找我私聊讓我幫你做一些基礎搭建
在開始之前,需要說明的是,即使是最簡方法,依然還是有一些小限制的。首先你需要本地有安裝 7z 壓縮工具,其次你需要一個包含了最新版本的 VisualStudio 神器
準備好了之後,咱就開始吧
第一步是下載我提供的基礎框架,可以從 CSDN 下載 或者給我一封郵件讓我發給你
第二步是解壓縮下載的基礎框架,下載下來是一個 7z 壓縮包,需要解壓縮才能使用
第三步就是雙擊 dotnetCampus.WPF.sln 開啟
好了,賀喜你,基礎部分就完成了,接下來就只需要在 Program.cs 寫程式碼就可以了。在 dotnetCampus.WPF 程式集裡面寫的程式碼,能用到 WPF 框架裡面所有 internal 內部許可權的成員
在 Program.cs 程式碼裡面可以看到我的模版內容
[STAThread] static void Main(string[] args) { var application = new Application(); var window = new Window() { Title = "林德熙是逗比" }; window.Loaded += (sender, eventArgs) => { // 這裡的 GetAppWindow 是 internal 的方法,但是在這個程式集可以訪問 var navigationWindow = application.GetAppWindow(); }; application.Run(window); }
如果你嘗試在自己的 WPF 專案裡面,呼叫 Application 類的 GetAppWindow 方法,將會提示你沒有訪問許可權或者沒有這個方法。但是在這個程式集裡面,你可以隨意的訪問這些 internal 方法
其實 WPF 框架的設計在大體上是十分好的,大部分的定製都能通過呼叫 itnernal 內部許可權成員,如類或方法實現。有了這個基礎框架,就能極大提升開發的 WPF 框架的效率,將大部分的實現邏輯放在 dotnetCampus.WPF 程式集。這樣能提供非常簡單的本地構建除錯方法,就和其他基礎專案相同的構建除錯方法,不需要去了解 WPF 框架相關構建知識
我推薦使用此方法來進行一部分不更改 WPF 已有邏輯的開發,而事實上作為一個龐大的框架,官方 WPF 團隊其實也不敢合入對已有邏輯有比較多更改的內容,誰知道有哪個模組靜默依賴了。因此更多的是新加,如新加某些新的類或者多開放某些方法等等。當然了即使是不合入官方倉庫,自己用的,我也不推薦更改已有的邏輯,因為大家也很難測試全。因此在不更改已有的邏輯下,使用此方法開發的效果和在 WPF 專案裡面更改的效果幾乎相同
用這個方法構建出來的應用就是用上了自己提供的定製的 WPF 框架,還請大家試試使用此方法
本文提供的這個程式集的最佳實踐方法就是提供轉換器,傳入某個 WPF 框架的類,接著在這個程式集裡面使用代理模式這個設計模式將這個類裡面的內容開放出來或者進行定製
為什麼會選用本文的這個方式來作為最簡方法?原因是如果使用 VisualStudio 進行編輯 WPF 框架,會遇到這樣的問題,更改一點東西就需要來一個構建,而構建 WPF 是一個緩慢的過程。因為我的技術不夠還做不到讓 WPF 框架支援增量編譯,因此每次構建最少都是 20 分鐘。這樣的除錯效率太低了
實際上本文提供的方法是給 WPF 每個專案都加上了一句 InternalsVisibleTo 到 dotnetCampus.WPF 程式集而已
使用這個方法也是有缺點的,如需要額外新增整個程式集以及在 dotnetCampus.WPF 程式集裡面是不能放 xaml 檔案的
我搭建了自己的部落格 https://blog.lindexi.com/ 歡迎大家訪問,裡面有很多新的部落格。只有在我看到部落格寫成熟之後才會放在csdn或部落格園,但是一旦釋出了就不再更新
如果在部落格看到有任何不懂的,歡迎交流,我搭建了 dotnet 職業技術學院 歡迎大家加入
如有不方便在部落格評論的問題,可以加我 QQ 2844808902 交流
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名林德熙(包含連結:http://blog.csdn.net/lindexi_gd ),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。如有任何疑問,請與我聯絡。