在 XAML 设计器中调试或禁用项目代码

很多情况下,造成 XAML 设计器中出现未处理异常的原因可能为:项目代码尝试访问在设计器运行应用程序时返回不同值或以不同方式运行的属性/方法。 可通过在 Visual Studio 的其他实例中调试项目代码解决这些异常,也可通过禁用设计器中的项目代码暂时阻止这些异常。

项目代码包括:

  • 自定义控件和用户控件

  • 类库

  • 值转换器

  • 针对从项目代码生成的设计时数据绑定

当禁用项目代码时,Visual Studio 会显示占位符。 例如,Visual Studio 会显示所含数据不再可用的绑定的属性名称,或显示不再运行的控件的占位符。

Unhandled exception dialog

确定项目代码是否会导致异常

  1. 在未处理的异常对话框中,选择“单击此处重载设计器” 链接。

  2. 在菜单栏上,选择“调试”>“启动调试”以生成和运行应用程序 。

    如果应用程序成功生成和运行,则设计时异常可能由设计器中运行的项目代码引起。

调试设计器中运行的项目代码

  1. 在未处理的异常对话框中,选择“单击此处禁用正在运行的项目代码并重载设计器” 链接。

  2. 在 Windows 任务管理器中,选择“结束任务” 按钮以关闭当前运行的 Visual Studio XAML 设计器的任何实例。

    XAML designer instances in TaskManager

  3. 在 Visual Studio 中,打开 XAML 页面,其中包含要调试的代码或控件。

  4. 打开 Visual Studio 的新实例,然后打开项目的第二个实例。

  5. 在项目代码中设置断点。

  6. 在 Visual Studio 的新实例中,选择菜单栏上的“调试”>“附加到进程” 。

  7. 在“附加到进程”对话框的“可用进程”列表中,选择与你正在使用的 Visual Studio 版本和开发所针对的平台匹配的进程(请参阅下表),然后选择“附加”按钮。

    Visual Studio 版本 平台 进程名称
    2017–2022 UWP 应用 UwpSurface.exe
    2017–2022 WPF Core 应用 WpfSurface.exe
    仅限 2019 WPF 框架 xDesProc.exe
    仅限 2022 WPF 框架 WpfSurface.exe

    重要

    在 Visual Studio 2019 中,如果在“工具”>“选项”>“环境”>“预览功能”中启用了“新的 WPF XAML 设计器”,则为 WpfSurface.exe。

  8. 在 Visual Studio 的第一个实例中,选择菜单栏上的“调试”>“启动调试” 。

    现即可单步执行设计器中运行的代码。

禁用设计器中的项目代码

  • 在未处理的异常对话框中,选择“单击此处禁用正在运行的项目代码并重载设计器” 链接。

  • 或者,在 XAML 设计器的工具栏上,选择“禁用项目代码”按钮 。

    The Disable Project Code button

    你可以再次切换按钮以重新启用项目代码。

    注意

    对于面向 ARM 或 X64 处理器的项目,Visual Studio 无法在设计器中运行项目代码,因此禁用设计器中的“禁用项目代码” 按钮。

  • 其中任一选项都会导致设计器重载,然后会禁用关联项目的所有代码。

    注意

    禁用项目代码可能导致设计时数据丢失。 或者调试在设计器中运行的代码。

控件显示选项

注意

“控件显示选项”仅适用于定目标到 Windows 10 Fall Creators Update(生成号 16299)或更高版本的通用 Windows 平台应用程序。 Visual Studio 2017 版本 15.9 或更高版本提供“控件显示选项”功能。

在 XAML 设计器中,可以将“控件显示选项”更改为,仅显示 Windows SDK 中的平台控件。 这可能会提升 XAML 设计器的可靠性。

若要更改“控件显示选项”,请单击设计器窗口左下角的图标,再选择“控件显示选项”下的选项:

Control Display Options

当你选中“仅显示平台控件”后,SDK 中的所有自定义控件、客户用户控件等都不会完整呈现。 相反,它们会被替换为回退控件,以展示控件的大小和位置。