如何手动重新加载WPF的Visual Studio设计器

61

有没有办法在不重新构建整个项目或解决方案的情况下强制WPF设计器重新加载或刷新?

如果出现错误,我可以在设计器视图中获得一个选项来刷新设计器。但是如果没有错误,在我进行更改后如何让设计器刷新?


3
到目前为止,最好的方法是访问一些代码后台文件,然后再返回到XAML文件。虽然有点麻烦,但还是很有用的。顺便说一下,Blend也存在同样的问题。 - Prince Ashitaka
至少在理论上,设计视图始终与XAML同步,因此无需手动刷新。我可以问一下,在什么情况下您想重新加载它? - gstercken
现在已经过了几个月,所以我无法回忆起确切的情况。这可能与我对数据绑定的列表视图和列表视图项进行更改有关。有时更改数据模板的构造方式不会在设计模式中显示出来。 - dthrasher
我总是在使用普通的XAML时遇到问题。没有什么花哨的东西,但突然间,设计师就停止更新了。所以,你说“理论上”它总是同步的是对的。然而,在实践中,它并不是。 :-( - Dave Haynes
任何动态对象都需要解决这个问题... - Vaccano
它总是崩溃。它的稳定性就像大象站在交通锥上一样不稳定。 - Contango
12个回答

47

我有一个略微晚了但是迄今为止最好的解决方案1:每当设计师出现问题时,我只需结束进程。

按下Ctrl+Shift+Esc
导航到“进程”选项卡。
结束XDesProc.exe

这也可以修复属性窗口的问题(例如当它卡住,无法输入内容时)。

1 这是解决设计师问题的方法。您的问题也可能是由编译问题引起的,在这种情况下,只需右键单击解决方案资源管理器中的解决方案,并进行清理。原因是有时编译会丢失与XAML生成文件的同步,而清理解决方案将删除那些中间文件;这就像重置,让您的编译可以重新开始。


快速处理:

通常按字母顺序排序,舒适地选择最后一个。
当它是最后一个时,我几乎会像进行仪式一样迅速弹出任务管理器,点击任何进程,按下EndDeleteEnter(完成)、Esc(退出任务管理器)。这样,您可以在1-2秒内完成,而不需要重新启动VS并等待所有的加载和卸载。


2
这太棒了!谢谢你! - Nikolai Koudelia
3
或者创建一个批处理文件并将其配置为始终以管理员身份启动:TASKKILL /IM XDesProc.exe /F - Martin Braun
1
这太有趣了。你的解决方案与我想到的一模一样(如果我没有先找到这个解决方案的话):杀死进程。然后你继续向开发人员解释,完全符合他们的逻辑:通过快捷键的组合来解决一些烦人的错误。这总是能让你向那些看到你未完成产品的人留下深刻印象。+1 - Brandon
这太棒了!!非常感谢!省了我很多时间 :) - thadaBoy
太棒了。只需使用一些专有的快捷键自动化即可获得利润。 - Artfaith

25

在较新版本的Visual Studio中,设计器底部有一个名为“禁用项目代码”的图标。如果您切换此选项,它将重新加载设计器。


1
这是一个更优雅、不那么hackish的解决方案……针对一款具有讽刺意味的不太优雅和hackish的产品。 - Nate Reynolds

24
您可以将此添加到Visual Studio的“工具”菜单中。
配置完成后,使用“工具..XAML设计师重启”: Alt+T,然后L enter image description here enter image description here 我尝试将其配置为Alt+T然后X,但这会与“工具..选择工具箱项目”冲突。
更新
现在,我更喜欢按Ctrl+Shift+Esc来打开进程管理器,然后按X跳转到XDesProc.exe,然后按Delete杀死异常进程。

1
Win10电脑,在任务管理器进程列表中找不到XDesProc.exe,但这种方法对我仍然有效。+1 - Slate
@Contango 默认安装的初始目录的完整路径是什么? - xtreampb
从记忆中来看,这是默认设置。只要 taskkill.exe 在路径中的某个位置,它就可以工作。您可以尝试从 cmd 提示符中运行此命令以查看是否已安装。 - Contango
然后,您可以打开“工具”->“选项”->“环境”->“键盘”,并为命令“Tools.ExternalCommand{x}”设置快捷方式,其中{x}是"External Tools"窗口菜单中的位置。 - Artfaith

7
Visual Studio 设计器尝试将渲染视图与 XAML 同步,这是它的宣传行为。
  • 首先,您应该检查错误窗口中是否有错误。可能只是缺少一个尖括号等简单问题。
  • 第二个需要检查的是,您是否有任何代码(除了代码后台)需要编译以正确呈现您的 XAML。这包括在 XAML 中实例化的任何自定义数据类型、您编写的任何自定义控件(例如从 TextBlock 派生的 MyTextBlock)或直接或间接支持设计时数据的任何类。如果是这样,您需要重新构建项目。
  • 最后需要检查的是设计器中可能存在的错误。尽管有宣传行为,但由于错误,设计器可能会失去同步。在这种情况下,关闭 XAML 窗口并重新打开它。其他可能起作用的技巧包括选择 XAML 选项卡然后再选择设计选项卡,或者最大化 XAML 窗格。
关于重建应用程序,您不需要经常这样做。只有当上述条件适用时,您才需要重新编译。一旦它们不适用,您就可以编辑 XAML。另一种说法是,如果您没有修改代码,则不需要重新构建(除了错误)。

2
你的第二个要点非常好:如果我编写的XAML依赖于必须编译的代码,并且编译后的代码以任何方式发生更改,则没有其他选择而必须重新构建项目。这个问题部分原因是由于我的个人工作流程;在单个编程会话中,我经常在编辑用户控件、代码后台和XAML之间跳转。 - dthrasher

3

我不确定,但我认为在这种情况下构建将刷新您的视图。


2
是的,它会。但是如果我需要构建项目或解决方案才能在设计器中看到我的更改,那么我可能会完全忽略设计器,直接运行应用程序! - dthrasher
@dthrasher 对我来说,我正在开发的应用程序需要几秒钟才能加载所有数据。构建速度要快得多。但当然这取决于每个项目。无论如何,我注意到设计师也没有始终保持刷新,这很糟糕,但是构建是我知道的最好解决方法。 - user348905

1

如果在XAML文件中有任何事件处理,那么大多数情况下它将无法从Visual Studio显示设计预览。如果您想从Visual Studio查看设计,请尝试使用命令绑定而不是事件,您将看到预览。


1

我不确定在WPF编辑中如何运作,但是在ASP.NET页面中,当设计视图无法更新时,我可以做两件事:

  1. 退出Visual Studio并重新启动
  2. 进入源代码视图(非拆分视图),输入一些内容并删除它(不要通过撤销,只需删除或退格),然后保存。然后返回到设计视图,通常视图就会被更新。

1
当您添加新的代码行或新的对象时,XAML设计器会同步,但当对象的属性被更改时,我遇到了非同步行为。
一个巧妙的方法是,当您更改属性时,只需从指令末尾删除一个“>”字符,然后重新输入它。

1

在XAML设计器的工具栏中,选择“禁用项目代码”按钮以重新加载设计师链接,该链接位于“打开对齐到对齐线”的右侧。

在设计器中禁用项目代码

如果已禁用,则可以尝试检查配置管理器并将处理器更改为“任何CPU”。

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

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


0

提供信息,我在使用 Visual Studio Community 2017 的 XAML 设计器时遇到了同样的问题,即有时设计器无法显示任何东西,最简单的解决方法是关闭 XAML 文件,然后重新打开它。

我还经常会遇到异常“发生未处理的异常 - 点击此处重新加载设计器 - 详细信息:XAML 设计器意外退出”(点击可以成功地重新启动设计器)。

请注意,在这个 VS 版本中,XAML 设计器的进程名称不是 XDesProc.exe,而是 UwpSurface.exe。如果你喜欢或必须结束该进程,则设计器会显示与上述相同的异常,你需要重新启动它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接