我從一萬二千年前開始寫XAML,這麼多年用了很多各式各樣的工具,現在留在電腦裡的、現在還在用的、在寫WPF時用的也就那麼幾個。這篇文章總結了這些工具,希望這些工具可以讓WPF開發者事半功倍。
1. Visual Studio
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/1fc84159a88743db6c9f2ec7f9dc89c7f219dbd1ca6cc0cda728f2984d02939b.png)
Visual Studio應該無需介紹,它是“面向任何開發者的同類最佳工具”。對WPF來說Visual Studio既是雞又是蛋,WPF開發者甚至有時會反編譯它的程式碼參考參考,最近HandyControl也參考Visual Studio程式碼增加了一個GlowWindow控制元件,這是個很有趣又實用的控制元件。雖然有那麼幾年WPF沒什麼大的改進,但Visual Stuido依然為XAML新增了很多使用的功能,我印象最深刻的是以下幾個。
應用程式時間線 探測器: 使用 “應用程式時間線” 探查器查詢並修正 XAML 應用程式中應用程式互動的相關效能問題。 此工具通過顯示應用程式資源使用情況的詳細檢視來幫助提高 XAML 應用程式的效能。 可以分析應用程式準備 UI 框架(佈局和呈現)以及為網路和磁碟請求提供服務所花費的時間,以及在應用程式啟動、頁面載入以及調整視窗大小等應用場景中花費的時間。
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/88b606f1a79ecd09b6fa6711594bfbe498e14c2150ef5b599a5055ce720f6080.png)
XAML熱過載允許您在應用程式執行時更改XAML程式碼,從而幫助開發者構建WPF或UWP應用程式使用者介面。Visual Studio和Blend For Visual Studio都提供了熱過載。此功能使開發者能夠通過執行應用程式的資料上下文、身份驗證狀態和其他在設計時難以模擬的實際複雜性,以增量方式構建和測試XAML程式碼。
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/74b3cbf27fcd6ef32c2e3a120796e862d5c8e1a226579046a6c58437df8ef5aa.gif)
開發者可以使用“實時視覺化樹”和“實時屬性資源管理器”實時地檢視正在執行的XAML程式碼。這些工具為開發者提供正在執行的XAML應用程式的UI元素的樹檢視,並向開發者顯示所選擇的任何UI元素的執行時屬性。
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/9280a85b7e07e1a2c2cea6c95ecfdbf8e7a966248b5c14101a23116bc16677b5.png)
2. Blend for Visual Studio
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/9e2d1b0cc97cd43d5f7f8ef5d9ebd38502257c61d381417780cfe5ac470e10db.png)
Blend是專門針對XAML程式的設計軟體,經典版的Blend是獨立軟體,程式碼編輯和除錯功能比Visual Studio差很遠,現在它則是成為了Visual Studio的另一個模式,名字也變成Blend for Visual Studio。雖然微軟對Blend不怎麼上心,但隨著Visual Studio越來越強大,Blend For Visual Studio也跟著得益。就算我可以手寫XAML,有很多事情還是需要在Blend裡做,例如設計VisualState、建立動畫、將文字和形狀轉換為路徑、獲取控制元件的ControlTemplate等。
安裝Visual Studio時預設不會安裝Blend for Visual Studio,需要選中它的CheckBox:
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/f9580cc2931da7c948bf28cfa4d0a4b7c3d898394797eeceea3d4dc45c59b93b.png)
順便一提,Visual Studio 2019不再提供BlendSDK,而這東西又基本是開發WPF必須的,所以需要自己安裝Microsoft.Xaml.Behaviors.Wpf nuget包。
##3. ILSpy
現在很多WPF專案都開源了,不過反編譯工具還是少不了的。比起dnSpy和JustDecompile,我更喜歡ILSpy,因為有很多BAML只有ILSpy能反編譯出來,例如System.Windows.Controls.Ribbon.dll
(見下面截圖)。不過我也很喜歡JustDecompile的“建立專案”功能,它可以直接反編譯一個Dll並建立一個專案(如果不出錯的話)。順便一提我也很喜歡JetBrains的dotPeek,它也可以正常反編譯BAML,只是它每次啟動都很慢。
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/d5a63361933f9a829f6555185458badafaa694085cbf4bb5b446e7f8b323c43d.png)
4. Snoop
Snoop是一個開源的WPF UI探索工具,它可以瀏覽正在執行的WPF程式的可視樹、改變它的屬性、檢視Triggers、設定斷點等。雖然現在Visual Studio也可以做到差不多的功能,但Snoop依然是我最喜歡使用的WPF工具之一。
在以前我還喜歡用XAML Spy,可惜那個軟體停止更新了。
下面是一張正在被Visual Studio除錯的正在Spying Visual Studio 的Snoop的截圖(套娃使我快樂):
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/c4c916908307b4a1c30149e93ce01ea815c7f62f78b541e5126e5205b3e0b9cb.png)
5. DebugView
DebugView是一個很古老但依然實用的工具,它可以檢視應用程式或驅動程式輸出的除錯資訊,而且不僅能檢視本地機器,還可以檢視遠端機器的除錯資訊。總而言之有了它可以方便檢視程式的除錯資訊,對除錯應用很有幫助。
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/d06890d46ac44a7eda9fb25ea65b97ff4fa8f281babdd869a73f1776f6caf657.png)
6. ReSharper
大名鼎鼎的ReSharper相信不用多介紹,不過要用上實在太花錢(授權和電腦配置)。除了可以強化C#程式碼體驗,ReSharper對XAML也有很多增強功能,包括:
- XAML的錯誤提示
- 增強的XAML智慧感知
- 導航和查詢XAML元素
- XAML程式碼重構
更詳盡的功能請看 XAML Editing Tools - Features ReSharper
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/2b522347be6a2774669acd1f74f607a950e9863643dd268e90f895419eb4d36f.png)
7. Visual UI Automation Verify
從UISpy到Inspect到Visual UI Automation Verify,微軟提供了很多自動化測試的協助工具,現在對我來說最常用的應該是UI Automation Verify了吧,它就位於Windows SDK的安裝目錄裡:X:\Windows Kits\10\bin\10.0.18362.0\x86\UIAVerify\VisualUIAVerifyNative.exe
,它上一級目錄裡還有inspect.exe(前提是需要先獲取Windows SDK)。如果自己開發的WPF程式使用了Microsoft UI Automation,這將是一個十分重要的工具。就算沒有,Visual UI Automation Verify也可以檢視到幾乎所有Windows UI的資訊。雖然它有點古老,但勝在又快又實用。
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/018e71f7c17e212d7441bfde9ce0eeb7d405bbca82a1aed513677da8ede2472a.png)
8. ResXManager
ResXManager是用於管理resx資原始檔的Visual Studio擴充套件,它提供了在Visual Studio中統一管理所有資原始檔的使用者介面。小規模的程式用不上,但一旦資源和資原始檔達到一定數量管理這些資源將十分痛苦,這時候ResXManager就必不可少。
![[WPF]總結一些我在開發WPF時常用的工具](https://i.iter01.com/images/070a6de47a2596ee84edaafc156745243fc7cdec437f6de3a3ddabd460bc386a.png)
9.結語
這篇文章主要介紹我開發WPF時常用的工具,其它還有些VB.NET To C#的程式碼轉換器、SVG TO XAML、和PNG TO ICO等線上工具,都是用到時再網上搜的。還有很多.NET的工具我沒有列出來,可以參考下面這篇文章: