日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

WPF 最简方法使用自己定制的 WPF 框架

發(fā)布時(shí)間:2023/12/14 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF 最简方法使用自己定制的 WPF 框架 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文提供了一個(gè)最簡(jiǎn)的方法,可以用到整個(gè) WPF 框架里面所有 internal 內(nèi)部權(quán)限的成員的方法。這是一個(gè)我自己定制的 WPF 框架,可以在此基礎(chǔ)上構(gòu)建屬于自己的定制化的 WPF 框架

本文提供的方法適用于 .NET 5 和 x86 下,如果需要其他版本,請(qǐng)自行構(gòu)建和使用,關(guān)于如何自行構(gòu)建和定制化,請(qǐng)看 手把手教你構(gòu)建 WPF 框架的私有版本

現(xiàn)在的 WPF 屬于 dotnet 基金會(huì)組織下的一個(gè)開源倉(cāng)庫(kù),基于 MIT 協(xié)議,意味著我可以進(jìn)行魔改然后私有發(fā)布甚至不再公開源代碼商業(yè)使用。而 WPF 是一個(gè)跨了很多代技術(shù)的框架,在 WPF 倉(cāng)庫(kù)里面既可以看到最新的 .NET 5 的代碼也可以看到上古的 Perl 的構(gòu)建代碼。這樣就會(huì)存在一個(gè)問題,本地構(gòu)建難度很高,調(diào)試難度也很高。想要在本地構(gòu)建出來,需要自己的設(shè)備的網(wǎng)絡(luò)能訪問世界上任意的網(wǎng)絡(luò)。而如果想要在 VisualStudio 上直接構(gòu)建出來,那就需要很多 msbuild 的預(yù)編譯知識(shí),和一些引用關(guān)聯(lián)知識(shí),雖然不難,但是知識(shí)量還是擺在這里的

于是此時(shí)的給 WPF 框架開發(fā)的勸退力就太足了,想要自己定制化屬于自己的 WPF 框架難度有點(diǎn)大,至少我每次定制化的步驟都有點(diǎn)多。因此我就在摸索最佳實(shí)踐,找到了最簡(jiǎn)的方法,請(qǐng)看下文

先不聊啥原理,原理部分我將會(huì)放在其他的博客里面,原因是原理太多了

使用本文的方法能實(shí)現(xiàn)的是,在我提供的程序集里面,可以訪問到 WPF 框架里面所有 internal 內(nèi)部權(quán)限的成員。限制是只適用于 .NET 5 和 x86 下,如需有其他定制還請(qǐng)閱讀我的原理博客,或者找我私聊讓我?guī)湍阕鲆恍┗A(chǔ)搭建

在開始之前,需要說明的是,即使是最簡(jiǎn)方法,依然還是有一些小限制的。首先你需要本地有安裝 7z 壓縮工具,其次你需要一個(gè)包含了最新版本的 VisualStudio 神器

準(zhǔn)備好了之后,咱就開始吧

第一步是下載我提供的基礎(chǔ)框架,可以從 CSDN 下載 或者給我一封郵件讓我發(fā)給你

第二步是解壓縮下載的基礎(chǔ)框架,下載下來是一個(gè) 7z 壓縮包,需要解壓縮才能使用

第三步就是雙擊 dotnetCampus.WPF.sln 打開

好了,賀喜你,基礎(chǔ)部分就完成了,接下來就只需要在 Program.cs 寫代碼就可以了。在 dotnetCampus.WPF 程序集里面寫的代碼,能用到 WPF 框架里面所有 internal 內(nèi)部權(quán)限的成員

在 Program.cs 代碼里面可以看到我的模版內(nèi)容

[STAThread]static void Main(string[] args){var application = new Application();var window = new Window(){Title = "林德熙是逗比"};window.Loaded += (sender, eventArgs) =>{// 這里的 GetAppWindow 是 internal 的方法,但是在這個(gè)程序集可以訪問var navigationWindow = application.GetAppWindow();};application.Run(window);}

如果你嘗試在自己的 WPF 項(xiàng)目里面,調(diào)用 Application 類的 GetAppWindow 方法,將會(huì)提示你沒有訪問權(quán)限或者沒有這個(gè)方法。但是在這個(gè)程序集里面,你可以隨意的訪問這些 internal 方法

其實(shí) WPF 框架的設(shè)計(jì)在大體上是十分好的,大部分的定制都能通過調(diào)用 itnernal 內(nèi)部權(quán)限成員,如類或方法實(shí)現(xiàn)。有了這個(gè)基礎(chǔ)框架,就能極大提升開發(fā)的 WPF 框架的效率,將大部分的實(shí)現(xiàn)邏輯放在 dotnetCampus.WPF 程序集。這樣能提供非常簡(jiǎn)單的本地構(gòu)建調(diào)試方法,就和其他基礎(chǔ)項(xiàng)目相同的構(gòu)建調(diào)試方法,不需要去了解 WPF 框架相關(guān)構(gòu)建知識(shí)

我推薦使用此方法來進(jìn)行一部分不更改 WPF 已有邏輯的開發(fā),而事實(shí)上作為一個(gè)龐大的框架,官方 WPF 團(tuán)隊(duì)其實(shí)也不敢合入對(duì)已有邏輯有比較多更改的內(nèi)容,誰(shuí)知道有哪個(gè)模塊靜默依賴了。因此更多的是新加,如新加某些新的類或者多開放某些方法等等。當(dāng)然了即使是不合入官方倉(cāng)庫(kù),自己用的,我也不推薦更改已有的邏輯,因?yàn)榇蠹乙埠茈y測(cè)試全。因此在不更改已有的邏輯下,使用此方法開發(fā)的效果和在 WPF 項(xiàng)目里面更改的效果幾乎相同

用這個(gè)方法構(gòu)建出來的應(yīng)用就是用上了自己提供的定制的 WPF 框架,還請(qǐng)大家試試使用此方法

本文提供的這個(gè)程序集的最佳實(shí)踐方法就是提供轉(zhuǎn)換器,傳入某個(gè) WPF 框架的類,接著在這個(gè)程序集里面使用代理模式這個(gè)設(shè)計(jì)模式將這個(gè)類里面的內(nèi)容開放出來或者進(jìn)行定制

為什么會(huì)選用本文的這個(gè)方式來作為最簡(jiǎn)方法?原因是如果使用 VisualStudio 進(jìn)行編輯 WPF 框架,會(huì)遇到這樣的問題,更改一點(diǎn)東西就需要來一個(gè)構(gòu)建,而構(gòu)建 WPF 是一個(gè)緩慢的過程。因?yàn)槲业募夹g(shù)不夠還做不到讓 WPF 框架支持增量編譯,因此每次構(gòu)建最少都是 20 分鐘。這樣的調(diào)試效率太低了

實(shí)際上本文提供的方法是給 WPF 每個(gè)項(xiàng)目都加上了一句 InternalsVisibleTo 到 dotnetCampus.WPF 程序集而已

使用這個(gè)方法也是有缺點(diǎn)的,如需要額外添加整個(gè)程序集以及在 dotnetCampus.WPF 程序集里面是不能放 xaml 文件的

我搭建了自己的博客 https://blog.lindexi.com/ 歡迎大家訪問,里面有很多新的博客。只有在我看到博客寫成熟之后才會(huì)放在csdn或博客園,但是一旦發(fā)布了就不再更新

如果在博客看到有任何不懂的,歡迎交流,我搭建了 dotnet 職業(yè)技術(shù)學(xué)院 歡迎大家加入

如有不方便在博客評(píng)論的問題,可以加我 QQ 2844808902 交流


本作品采用知識(shí)共享署名-非商業(yè)性使用-相同方式共享 4.0 國(guó)際許可協(xié)議進(jìn)行許可。歡迎轉(zhuǎn)載、使用、重新發(fā)布,但務(wù)必保留文章署名林德熙(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用于商業(yè)目的,基于本文修改后的作品務(wù)必以相同的許可發(fā)布。如有任何疑問,請(qǐng)與我聯(lián)系。

總結(jié)

以上是生活随笔為你收集整理的WPF 最简方法使用自己定制的 WPF 框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。