在 Snoop 中使用 PowerShell 指令碼進行更高階的 UI 除錯
在 WPF 開發時,有 Snoop 的幫助,UI 的除錯將變得非常輕鬆。使用 Snoop,能輕鬆地檢視 WPF 中控制元件的視覺化樹以及每一個 Visual 節點的各種屬性,或者檢視資料上下文,或者監聽檢視事件的引發。
不過,更強大的是支援使用 PowerShell 指令碼。這使得它即便 UI 沒有給你提供一些入口,你也能通過各種方式檢視或者修改 UI。
Snoop PowerShell 入口
常規 Snoop 的使用方法,將獅子瞄準鏡拖出來對準要除錯 UI 的 WPF 視窗鬆開。這裡我拿 Visual Studio 2019 的視窗做試驗。
在開啟的新的 Snoop 視窗中我們開啟 PowerShell 標籤。
本文的內容將從這裡開始。
自帶的 PowerShell 變數
在 Snoop 的 PowerShell 提示視窗中,我們可以得知有兩個變數可以使用: $root
和 $selected
。包含這兩個,還有其他的可以使用:
$root $selected $parent $null
當然,你也可以定義和使用其他的變數,後面會說。
基本的 PowerShell 命令
屬性
# 獲取屬性 $selected.Visual.Content
# 將屬性設定為 null $selected.Visual.Content = $null
直接像 C# 語法那樣一直在後面使用 .
可以訪問例項中的屬性。不需要關心例項是什麼型別的,只要擁有那個屬性,就可以訪問到。
比如下面,上面的例子我們選中的是 MainWindow
,於是我們使用 $selected.Visual.Content
訪問到 MainWindow
的 Content
屬性,而後面 $selected.Visual.Content = $null
則是將 Window
的內容清空了。
建立物件
# 建立物件 $button = New-Object System.Windows.Controls.Button -property @{ Content = "歡迎訪問 walterlv.com" }
呼叫方法
$selected.Visual.Children.Add($button)
頂部的那個按鈕就是通過上面的命令新增上去的。
呼叫靜態方法用的是 [類名]::方法名(引數)
$button.Content = [System.Environment]::Version.ToString() + " running for walterlv.com"