【问题标题】:How to programmaticaly refresh VS code editor in VSIX extension如何在 VSIX 扩展中以编程方式刷新 VS 代码编辑器
【发布时间】:2018-06-03 00:38:39
【问题描述】:

如何强制刷新 Visual Studio 的代码编辑器?

我有一个 VSIX 扩展,它通过 VS 标记机制实现自定义着色。该扩展程序有一些设置,例如关闭着色。它们通过 DialogPage 机制集成到 VS 设置中,就像在 MSDN 示例中一样。我在 ITaggerProvider CreateTagger 实现中使用它们来决定是否应该使用标记器。

当我更改颜色设置时,打开的文档的颜色不会刷新。但是我可以关闭并重新打开它们,然后根据新设置的值对文档进行着色。 有没有办法告诉 Visual Studio 刷新代码编辑器并为其重新创建标记器?

【问题讨论】:

  • 更改后是否保存设置/项目?即使在默认的代码编辑器中也没有找到刷新功能,也许您可​​以考虑自动重新打开代码编辑器或其他。
  • 是的,我确实会在更改后保存我的设置。实际上我使用了一个派生自 DialogPage 的类。它使用VS默认机制来保存设置。
  • 其实我已经找到了解决方法。您可以在 Options 类中声明事件 SettingsChanged 并在保存设置时引发(如果需要)。然后,您可以在其上订阅您的标记器,并在处理程序中引发 TagsChanged 事件。为防止内存泄漏,标记器应实现 IDisposable.Dispose 以取消订阅事件。这对我有用。我仍然认为它没有回答我原来的问题 - 如何刷新编辑器

标签: c# visual-studio visual-studio-2015 visual-studio-extensions vsix


【解决方案1】:

您可以尝试关闭该文档并再次打开它。

    string path = dte.ActiveDocument.FullName;
    dte.ActiveDocument.Save();
    dte.ActiveDocument.Close();
    dte.ItemOperations.OpenFile(path);

编辑:更好的方法是引发在你的标记器类中声明的事件(它实现了 ITagger 接口)。

【讨论】:

  • 这不会导致用户可见的效果,例如奇怪的关闭/重新打开,在文档选项卡中丢失位置好吗?
  • @SENya 是的,你是对的。这是“一个”解决方案,我理解不是最好的解决方案。
  • 引发TagsChanged事件确实是我走的路。到目前为止效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多