Ohhnews

分类导航

$ cd ..
Jetbrains Blog原文

WPF热重载功能上线:在Rider中编辑XAML实时查看更新

#wpf#热重载#rider#xaml#.net

WPF 热重载现已可在 Rider 中使用,从 2026.2 EAP 2 版本开始。你可以在调试器中运行应用的同时编辑 XAML,并立即看到更改,无需重新生成、无需重启、不会丢失在应用中的位置。结合 Rider 中已有的 C# 热重载支持,这为 WPF 补全了“编辑并继续”工作流程。

这个功能我们期待已久,我们想坦诚地说明这一点。对 WPF 热重载的请求 是 Rider 历史上投票数最高的问题之一。我们阅读了你们评论的每一个字,我们今天推出的功能正是根据这些反馈直接塑造的。

在进一步介绍之前,先快速、诚实地说明一下:这是一个 Beta 版本。WPF 的覆盖面很大,有些场景尚未支持。我们将在下面明确列出这些情况,以便你确切了解预期。
下载 Rider 2026.2 EAP

WPF 热重载的作用

当你在 Rider 调试器下运行 WPF 应用时,你现在可以修改 XAML,并将保存的更改实时反映到正在运行的应用中。调整边距、重新设置按钮样式、调整 DataTemplate、更改颜色、重新设计布局——然后保存,UI 就会就地更新。应用保持其当前状态。你无需通过五个屏幕导航回你正在处理的视图。你无需重新生成。只需持续迭代。

这对你的工作方式为何重要

WPF UI 开发有其自然的节奏:更改某些内容,查看效果,调整。没有热重载,这种节奏会不断被重新生成和点击返回到你之前的屏幕所打断。有几种情况尤其令人沮丧,而且不幸的是,它们并不少见。

大型、长期维护的 WPF 应用。 对于许多团队来说,WPF 并非遗留技术。它是现在和未来发展路线图的一部分,拥有十年甚至更长时间的积极开发前景,涉及由许多开发人员同时维护的应用程序。在这样的代码库中,UI 迭代速度并非锦上添花;它会在每个开发人员每天的工作中累积。热重载将 WPF UI 工作中最重复的循环——更改、重新生成、导航返回、检查循环——压缩为一个步骤。

具有复杂 UI 结构的应用。 这就是有趣之处。热重载在真正复杂的设置中表现良好,包括包含共享 WPF 库中自定义控件控件模板的 XAML 资源字典。这正是其他热重载实现中容易变得脆弱的结构。如果你的 UI 由分层样式、模板化自定义控件和共享资源字典构建,那么热重载很可能就是你工作流程中缺失的关键一环。

双 IDE 配置。 团队通常使用 Rider 完成大部分工作,同时保持 Visual Studio 打开,专门用于实时 XAML 循环。为了一项任务维护两个 IDE 是没有人想要的摩擦。热重载消除了不断切换的需要,对于许多开发者来说,这是保留第二个 IDE 的唯一原因。

支持的目标框架

当前的 EAP 版本支持最新版本的 .NET 和 .NET Framework。net9.0-windowsnet10.0-windows 工作正常,.NET Framework 目标也受支持。

如何尝试

  1. 下载 Rider 2026.2 EAP 2 或更高版本。
  2. 打开你的 WPF 项目并从 Rider 启动一个 调试 会话。
  3. 编辑并保存你的 XAML 更改,无论是样式、模板、布局还是资源。
  4. 观察正在运行的应用就地更新。

[LOADING...] 在此示例中,我们使用对天气应用 UI 的更改,以说明 Rider 2026.2 中 WPF 项目的无缝热重载体验。

这就是整个循环。无需额外配置,无需启用单独模式。

已知限制

以下是值得仔细阅读的部分:这些是热重载当前无法应用更改的情况,以及可能的变通方法。对于其中一些限制,我们没有立即的开发计划,而其他限制将在未来的版本中解决。以下是 Beta 目前的状态。

  • 添加、删除或更新 NuGet 包。 还原包,然后重新启动调试会话。
  • 在应用运行时向项目中添加新控件、窗口、页面或其他文件。 重新启动调试会话以使其生效。
  • 更改已加载的 XAML 文件的根类型或 x:Class (例如,将 Window 转换为 Page)。
  • 对运行时创建的资源或运行时切换的主题字典进行更改。 重新启动调试会话以应用它们。
  • 添加依赖静态注册的新 WPF 类成员,例如 DependencyProperty、附加属性或 RoutedEvent。注意:这仅适用于注册发生在静态字段初始化器中的情况;稍后在方法中分配字段可能也有效。
  • 在 XAML 中添加新的 x:Name 值。 这是部分的:XAML 更新本身会实时应用,但新的名称只有在重新启动调试会话后才能从 C# 代码隐藏中使用。
  • 更改由一次性触发器启动的动画,例如 Loaded 上的 EventTrigger。更新后的动画在视图再次加载之前不会重新启动。

帮助我们确定优先级

以上大多数限制都在 YouTrack 中进行了跟踪,并计划在即将发布的版本中解决。每个问题都有自己的工单,你可以在其中投票并从你的设置中添加详细信息。我们得到的关于哪些问题阻碍你工作的信号越多,就越容易确定优先级:

  • [RIDER-138349] 附加到进程后的热重载
  • [RIDER-138659] 对运行时创建的资源或运行时切换的主题字典的更改
  • [RIDER-138874] 添加依赖静态注册的新 WPF 类成员
  • [RIDER-138348] 更改由一次性触发器启动的动画

一些场景距离尚远,包括附加到已运行的进程后的热重载。这些需要更多研究,我们才能承诺具体的实现方法。如果你的架构依赖于其中之一,请创建一个工单,并提供来自你实际设置的具体复现细节。

告诉我们你的体验

Rider 中的 WPF 热重载之所以存在,是因为开发者反复且明确地告诉我们他们需要什么,所以你现在能做的最好的事情就是继续提供反馈。在你的真实项目上尝试,而不仅仅是示例,然后在评论中、在 X 上 或通过我们的问题跟踪器告诉我们它的效果如何。

我们将继续扩展框架覆盖面,并在 EAP 周期及之后逐步解决上述限制。感谢所有投票、评论和等待的人,欢迎所有首次尝试的人。
下载 Rider 2026.2 EAP