> For the complete documentation index, see [llms.txt](https://avaloniachina.gitbook.io/avalonia/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://avaloniachina.gitbook.io/avalonia/docs/getting-started/developer-tools.md).

# 开发者工具

Avalonia 有一个内置的 DevTools 窗体，通过在 `Window` 的构造函数中调用附加的 `AttachDevTools()` 方法来启用该窗口。当程序在 `DEBUG` 模式下编译时，默认模板会开启此功能：

```csharp
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

// in auto-generated by Avalonia.NameGenerator MainWindow.g.cs:
partial class MainWindow
{
    // ...
    public void InitializeComponent(bool loadXaml = true, bool attachDevTools = true)
    {
        // ...
#if DEBUG
        if (attachDevTools)
        {
            this.AttachDevTools();
        }
#endif
        // ...
    }
}
```

要打开 DevTools，请按 F12，或向 `this.AttachDevTools()` 方法传递不同的 `Gesture` 以设置不同的快捷键。

{% hint style="info" %}
从 release 0.10 版本开始，要使用 DevTools，必须添加 `Avalonia.Diagnostics` nuget 包。

```bash
dotnet add package Avalonia.Diagnostics --version 0.10.0
```

{% endhint %}

![](/files/2ocf2dPObop5zu8TdfQS)

在 .NET core 2.1 下运行时存在一个已知问题，即按 F12 将导致程序退出。在这种情况下，或者切换到 .NET core 2.0 或 3.0+，或者更改快捷键，例如 `Ctrl+F12`。

## Logical Tree 和 Visual Tree

`Logical Tree` 和 `Visual Tree` 选项卡展示了控件在窗体中的逻辑树和视觉树。选中一个控件后，右侧的窗格中会显示该控件的属性，可以在这个窗格中编辑该控件的属性。

### 属性

允许快速查看和编辑控件的属性。还可以搜索属性（通过名称或使用正则表达式）。

| 列名       | 描述     |
| -------- | ------ |
| Property | 属性的名称  |
| Value    | 属性的当前值 |
| Type     | 当前值的类型 |
| Priority | 值的优先级  |

![](/files/KkS8JAnkMegetLcAEeMO)

### 布局

允许检查和编辑常用布局属性(`Margin`, `Border` , `Padding`) 还显示了控件大小和大小约束。

{% hint style="info" %}
如果 `Width` 或 `Height` 带下划线，则表示存在活动约束。将光标悬停在该值上可查看包含相关信息的工具提示。
{% endhint %}

![](/files/G87kBNQCUqIVMuPlJvOV)

### 样式

[属性](#properties) 面板显示了当前属性的活动值(active values)，样式面板显示了所有值和值的来源。

此外，可以看到可能与此控件匹配的所有样式（通过切换 `Show inactive` 选项）。

当前样式可以通过按下 `Snapshot` 按钮或在悬停在目标窗口上时按下 `Alt+S` 记录快照。快照意味着样式面板不会随着控件的状态变化而更新。这在排除有 `:pointerover` 或 `:pressed` 的选择器的问题时特别有用。

{% hint style="info" %}
如果赋值器的值绑定了一个资源，它将指示成一个圆圈后接资源键的形式。
{% endhint %}

![](/files/npAuxYgTl6FhQvzXKiQT)

{% hint style="info" %}
如果给定的值含有删除线，则表示该值被具有更高优先级的样式中的值覆盖了。
{% endhint %}

![](/files/3Yi6zERqIdYLFojwddnq)

赋值器有一个上下文菜单，能够快速将名称和值复制到剪贴板。

![](/files/uVAZ5fmbSnj3NrQiNt4j)

## 事件

事件选项卡用来跟踪 [事件](/avalonia/docs/input.md) 的传播。在左窗格中选择要跟踪的事件，该类型的所有事件都将显示在中上部分的窗格中。可以选择其中一个事件查看事件路由。

{% hint style="info" %}
事件名称或控件类型下面的点下划线示意可以快速导航。

* 双击事件类型将选择并滚动到给定的事件类型
* 双击控件类型（和/或名称）将导航到可视化树选项卡并选中该控件。
  {% endhint %}

![](/files/V9nd0UAUGQxIB4Cp8XZY)

## 控制台

可以使用 View → Console 菜单显示控制台。控制台实现了一个 C# REPL，它可以用来运行任意的 C# 代码。在控制台会话中，可以使用以下预定义变量：

* `help`: 输出帮助信息
* `e`: 在逻辑树或可视化树中当前选中的控件
* `root`: 视觉树的根

## 快捷键

| 按键组合       | 功能       |
| ---------- | -------- |
| Alt+S      | 启用快照样式   |
| Alt+D      | 禁用快照样式   |
| CTRL+Shift | 通过指针定位控件 |
| CTRL+Alt+F | 冻结切换的弹出框 |

## 示例

### 更改属性值

![](/files/I2d5EpxlSEyGFYy6yGz2)

### 更改布局属性

![](/files/9SnkOCZvtCyWtdnuLiSa)
