文章目录
- 前言
- 运行环境
- 简单的WPF代码
- 实现一个简单的ListBox
- Visual Studio自带代码调试
- 热重置功能测试
- 实时可视化树
- 查找窗口元素
- 显示属性
- Snoop调试使用
- Snoop简单使用
- 调试控制台
- 元素追踪
- 结构树
- Visual/可视化结构树
- Logical/本地代码可视化树
- AutoMation/自动识别结构树
- WPF元素控制台
- 结论
前言
WPF虽然自己本身自带调试工具,但是那个调试工具相对来说功能有点少,我这里会对Visual Studio 原生的调试工具和第三方调试工具Snoop进行比较
运行环境
- window10
- visual studio 2022
- .net core 8.0
简单的WPF代码
我这里用了CommunityToolkit.MVVM
实现一个简单的ListBox
ViewModel
public class TestViewModel
{
public record Person(int Id,string Name,string Descirption);
public List<Person> People => new List<Person>()
{
new Person(1,"小王","王哥"),
new Person(2,"小帅","大帅比"),
new Person(3,"小美","美美的")
};
public TestViewModel() { }
}
<UserControl x:Class="WpfSnoopDemo.Views.TestView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfSnoopDemo.Views"
mc:Ignorable="d"
xmlns:viewModels="clr-namespace:WpfSnoopDemo.ViewModels"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.DataContext>
<viewModels:TestViewModel />
</UserControl.DataContext>
<Grid>
<ListBox ItemsSource="{Binding People}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<!--这个是一种仿CSS的写法-->
<StackPanel.Resources>
<Style TargetType="StackPanel">
<Setter Property="Orientation"
Value="Horizontal" />
</Style>
</StackPanel.Resources>
<StackPanel>
<TextBlock Text="Id:" />
<TextBlock Text="{Binding Id}" />
</StackPanel>
<StackPanel>
<TextBlock Text="Name:" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
<StackPanel>
<TextBlock Text="Descirption:" />
<TextBlock Text="{Binding Descirption}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</UserControl>
Visual Studio自带代码调试
热重置功能测试
热重置的意思是编译运行之后修改源代码,能通过重载而不用重新编译就能看到新修改的效果。
实时可视化树
序号 | 用途 |
---|---|
1 | 显示WPF Debug运行调试工具 |
2 | 选择元素 |
3 | 显示装饰器,就是个十字坐标定位,显示盒子模型 |
4 | 跟踪具有焦点的元素,暂时不知道有啥用 |
5 | 显示绑定问题 |
6 | 辅助扫描,没啥用 |
7 | 预览选定项,不知道有啥用 |
8 | 活动文档查找元素。就是你鼠标选择了哪个,点这个可以跳转到鼠标选中的对应结构 |
9 | 显示对应元素属性 |
10 | 展开树结构 |
11 | 压缩树结构 |
12 | 只显示自己的代码 |
WPF Debug窗口是部分工具展示,这里就不展开说明了。
查找窗口元素
显示属性
这里面会显示所有对应的属性
也可以看DataContext
Snoop调试使用
WPF Snoop Github地址
Snoop下载地址
下载好了直接安装
双击运行之后出现这个界面
Snoop简单使用
关于Snoop的用法
打开Snoop我们可以看到这几个按钮
序号 | 含义 | 使用情况 |
---|---|---|
1 | 选择正在运行的WPF窗口 | 一般不用 |
2 | 刷新找到的WPF窗口 | 一般不用 |
3 | 在【1】选择好对象后,创建一个Snoop克隆 | 一般不用 |
4 | 拖动准星,选择WPF窗口,实现【3】效果 | 一般不用 |
5 | 创建一个Snoop可克隆对象并添加【调试控制台】 | 常用 |
6 | 在【4】的基础上面创建【调试控制台】 | 常用 |
7 | 设置 | 一般默认即可 |
8 | 缩小 | |
9 | 关闭 |
调试控制台
我们在使用【5】/【6】的时候,会生成如下的调试窗口
序号 | 功能 |
---|---|
1 | 结构树 |
2 | 配置文件 |
3 | 设置 |
4 | 窗口元素追踪,快捷键:Ctrl+Shift+鼠标移动 |
5 | 断点调试 |
6 | 版本 |
7 | 主题,有黑色和白色 |
元素追踪
使用Ctrl+Shift选中元素,由于我GIF录屏会有窗口遮挡,所以有点不连贯。
有时候选择多了会出现这个Bug,我们点击清空即可
结构树
我们先选中一个元素
鼠标停留在对应的树节点上面,会显示对应的可视化元素值
Visual/可视化结构树
可视化结构树就是里面所有的基础控件元素,和我们F12跳出来的Html控制台的结果差不多
Logical/本地代码可视化树
AutoMation/自动识别结构树
自动识别处于两种之间,自动识别我们自己本地的代码
WPF元素控制台
序号 | 用处 |
---|---|
1 | 元素属性 |
2 | 元素上下文 |
3 | 元素Event事件,一般是鼠标事件 |
4 | 元素触发器 |
5 | 元素行为 |
6 | 元素方法 |
7 | Debug监听器 |
这里用法太多了,我们就不展开说明了
我们也可以实时修改对应的元素,但是感觉用处不是很大,因为WPF已经支持热重载了。
结论
Snoop算是Visual Studio的补充,Visual Studio本身的代码调试就已经是非常的惊艳了。其它的玩法我也在摸索当中。Snoop算是浏览器的F12,你是用来查看元素的,不是直接改Html结果的。这个是一个很好的代码调试的作用和对元素Visual Studio的补充。