RulerSmith
在正在调试的应用上按住 Ctrl+Shift:指针下的控件会显示其大小,柔和的箭头显示与周围控件的距离。松开按键,一切随即消失。
免费 · Visual Studio 2022 和 2026 · 14 种界面语言 · 无遥测
为什么选择 RulerSmith

真实的边界,而非猜测
大小来自 UI Automation(屏幕阅读器使用的同一棵树),因此阴影、渐变和抗锯齿不会像骗过像素标尺那样骗过它。
你所写的单位
WPF 和网页以与设备无关的单位布局:76 × 32 就是你在 XAML 或 CSS 中写的值,屏幕像素(200 % 下为 152 × 64)显示在其下方。
只在按住按键时工作
在你按住按键之前,不进行任何计算或绘制。覆盖层从不接收单击或焦点,调试器暂停时它也会停下。
免费,没有附加条件
没有订阅、没有“Pro”版、不收集数据,也不会在“输出”窗口或启动时显示消息。我们唯一的请求是:在你用过一段时间之后,到 Marketplace 给个评分。支持 Visual Studio 2022 和 2026,x64 和 ARM64。
功能
- 指针下控件的大小及其类型(Button、ComboBox…),以应用的单位显示,在缩放的显示器上还显示屏幕像素。
- 与相邻控件的间距:每一侧最近的控件,没有控件时则为容器的边缘——就是你会手动画出的那些线。
- 每个监视器的 DPI:考虑每个监视器的缩放比例;WinForms 和 Win32 应用以其自身的像素测量,无论是否支持 DPI 感知。
- RulerSmith 面板:控件的名称和自动化 ID、大小、位置以及间距和它们的终点;还有测量开关和每类应用的开关。
- 柔和的出现效果:轮廓淡入,然后箭头从控件向外延伸——也可以全部同时出现,或完全不用动画。
- 与调试会话绑定:按 F5 启动,只测量被调试的应用(以及它打开的内容,如 WebView2 或 Web 项目的浏览器),随会话结束而停止。
测量
开始调试,按住 Ctrl+Shift,将指针移到应用上。新的控件会显示轮廓,其下方显示大小,间距箭头延伸到相邻控件;数字随指针从一个控件移到另一个控件。

| 屏幕上显示 | 含义 |
|---|---|
| 细轮廓 | 指针下控件的边界。按钮内的文本或图标算作按钮本身。 |
| Button 76 × 32 152 × 64 px · 200 % | 类型和以应用单位表示的大小;在缩放的显示器上,第二行显示屏幕像素和缩放比例。 |
| 实线箭头 | 到该侧最近控件的间距。相互接触的控件不显示箭头。 |
| 虚线箭头 | 该侧没有控件:到容器边缘(窗口的工作区)的间距。 |
RulerSmith 面板
调试 → RulerSmith 面板(也位于 视图 → 其他窗口)。工具栏可打开和关闭测量——与“调试”工具栏上的 测量布局 是同一个开关——也可以分别控制每类应用:WPF、WinForms、Win32、Web。下方是最近一次测量:控件的名称和自动化 ID(可据此在 XAML 中找到该控件)、大小、在窗口中的位置,以及每个间距和它终止于的控件。状态行说明为什么没有绘制任何内容:未在调试、在断点处暂停,或测量已关闭。

支持哪些应用
RulerSmith 通过 UI Automation 读取控件,因此它测量的是应用在其中公开的内容——标准控件默认就会公开。
| 应用 | 说明 |
|---|---|
| WPF | 单位与设备无关。Visual Studio 覆盖在被调试 WPF 应用上的半透明 XAML 工具栏会被跳过;选项卡中的内容可以找到。 |
| Windows Forms | 单位是应用的像素:支持 DPI 感知的应用为 1:1,不支持的应用由 Windows 拉伸。 |
| Win32, MFC | 使用 CreateWindow 创建的窗口和来自资源的对话框:按钮、编辑框、组合框、列表、树。 |
| 网页 | 调试时的 Edge、Chrome 和 Firefox——Visual Studio 经常在已运行的浏览器中打开 Web 项目。单位是 CSS 像素。面板中的 Web 开关可将其关闭。 |
不支持:WinUI、UWP 和 MAUI。不创建自动化对等体的自定义控件对 UI Automation 不可见,此时测量的是它的容器。
设置
工具 → 选项 → SmithWorks → RulerSmith。每个选项都有说明。
| 选项 | 默认值 |
|---|---|
| 按住以测量 | Ctrl+Shift |
| 调试时测量 | 开 |
| 在缩放的显示器上显示屏幕像素 | 开 |
| 出现时使用动画 | 开 |
| 间距箭头从控件向外延伸 | 开 |
| 请求在 Marketplace 上评分 | 开 |
设置保存在 %LocalAppData%\RulerSmith 中。

常见问题
RulerSmith 会发送数据吗?
不会。一切都在你的计算机上进行:一个小型覆盖层进程通过 UI Automation 读取控件并在屏幕上绘制。没有网络请求,没有遥测。
为什么只有整个窗口(或一个大面板)显示轮廓?
应用没有向 UI Automation 公开其中的控件——通常是没有自动化对等体的自定义控件。在这类控件中重写 OnCreateAutomationPeer 即可使其可测量,同时也让屏幕阅读器可以访问。
按住按键时什么都没有绘制。
请检查调试会话是否正在运行且未暂停,以及面板的状态行是否显示 正在测量。某类应用可能已在面板中关闭。其他程序可能使用了相同的按键:请在设置中选择其他组合键。
为什么在断点处会停止?
暂停的应用无法响应 UI Automation。覆盖层会停下,直到你继续(F5)。
将来会支持 WinUI、UWP 或 MAUI 吗?
暂时不会。如果你需要,请在 Feedback 仓库中告诉我们。
可以在没有 Visual Studio 的情况下测量应用吗?
可以:运行扩展文件夹中的 RulerSmith.Overlay.exe。它驻留在通知区域,在按住按键时测量任何窗口。
在哪里报告问题或提出功能建议?
请在 GitHub 上的 Feedback 仓库中提交 issue——那里有用于报告错误和提出建议的表单(如有私密名称,请先替换)。也可以使用 Marketplace 上的 Q&A 选项卡。
更新日志
1.0.2
- 在扩展确实有用之后,一次性请求在 Marketplace 上评分——可选择“以后再说”或“不再询问”,也可以在选项中关闭。
1.0.1
- 设置中新增“在 Marketplace 上评价”链接。
1.0.0
- 首个公开版本。