在 Snoop 中使用 PowerShell 脚本进行更高级的 UI 调试
版權聲明:本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名呂毅(包含鏈接:https://walterlv.blog.csdn.net/),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布。如有任何疑問,請與我聯系(walter.lv@qq.com)。 https://blog.csdn.net/WPwalter/article/details/87904027
在 WPF 開發時,有 Snoop 的幫助,UI 的調試將變得非常輕松。使用 Snoop,能輕松地查看 WPF 中控件的可視化樹以及每一個 Visual 節點的各種屬性,或者查看數據上下文,或者監聽查看事件的引發。
不過,更強大的是支持使用 PowerShell 腳本。這使得它即便 UI 沒有給你提供一些入口,你也能通過各種方式查看或者修改 UI。
本文內容
- Snoop PowerShell 入口
- 自帶的 PowerShell 變量
- 基本的 PowerShell 命令
- 屬性
- 創建對象
- 調用方法
- 參考資料
Snoop PowerShell 入口
常規 Snoop 的使用方法,將獅子瞄準鏡拖出來對準要調試 UI 的 WPF 窗口松開。這里我拿 Visual Studio 2019 的窗口做試驗。
在打開的新的 Snoop 窗口中我們打開 PowerShell 標簽。
本文的內容將從這里開始。
自帶的 PowerShell 變量
在 Snoop 的 PowerShell 提示窗口中,我們可以得知有兩個變量可以使用:$root 和 $selected。包含這兩個,還有其他的可以使用:
- $root 拿到當前 Snoop 窗口頂層元素類型的實例
- $selected 拿到當前 Snoop 用鼠標或鍵盤選中的元素的實例
- $parent 拿到當前 Snoop 選中元素的可視化樹父級
- $null 就是 .NET 中的 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"參考資料
- Snooping WPF: Tips and PowerShell tricks
我的博客會首發于 https://walterlv.com/,而 CSDN 和博客園僅從其中摘選發布,而且一旦發布了就不再更新。
如果在博客看到有任何不懂的內容,歡迎交流。我搭建了 dotnet 職業技術學院 歡迎大家加入。
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名呂毅(包含鏈接:https://walterlv.blog.csdn.net/),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布。如有任何疑問,請與我聯系。
posted on 2019-03-08 14:25 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lonelyxmas/p/10495596.html
總結
以上是生活随笔為你收集整理的在 Snoop 中使用 PowerShell 脚本进行更高级的 UI 调试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有时候eclipse 导入maven项目
- 下一篇: [Swift]LeetCode682.