【问题标题】:How to get IWpfTextView from command Visual Studio Extension 2017如何从命令 Visual Studio Extension 2017 获取 IWpfTextView
【发布时间】:2017-08-18 08:20:25
【问题描述】:

我需要显示弹出窗口使用 TextViewAdornment,它需要 IWpfTextView。 有旧代码:

private IWpfTextView GetWpfTextView(IVsTextView vTextView)
{
   IWpfTextView view = null;
   IVsUserData userData = vTextView as IVsUserData;

   if (null != userData)
   {
      IWpfTextViewHost viewHost;
      object holder;
      Guid guidViewHost = DefGuidList.guidIWpfTextViewHost;
      userData.GetData(ref guidViewHost, out holder);
      viewHost = (IWpfTextViewHost)holder;
      view = viewHost.TextView;
   }
   return view;
}

但是当转到 Visual Studio 2017 Extension DefGuidList.guidIWpfTextViewHost 时丢失。所以我再也无法获得 IWpfTextView 了。

请帮助我。 谢谢大家。

【问题讨论】:

  • 非常感谢!
  • 对于其他人:您必须添加参考手册。添加参考 -> 程序集 -> 扩展,然后选择 Microsoft.VisualStudio.ComponentModelHost 和 Microsoft.VisualStudio.Editor
  • @Tan Nguyen,所以这个问题已经解决了,对吗?如果是这样,您能否将解决方案发布为答案?因此,您可以稍后将其标记为答案,并帮助遇到与您相同问题的其他社区成员。

标签: c# visual-studio-2017 visual-studio-extensions


【解决方案1】:

在 Sergey Vlasov 回答后,我找到了解决方案:

private IWpfTextView GetWpfView()
{
        var textManager = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
        var componentModel = (IComponentModel)this.ServiceProvider.GetService(typeof(SComponentModel));
        var editor = componentModel.GetService<IVsEditorAdaptersFactoryService>();

        textManager.GetActiveView(1, null, out IVsTextView textViewCurrent);
        return editor.GetWpfTextView(textViewCurrent);
}

您必须通过 Add Reference -> Assemblies -> Extensions 添加一些参考手册。然后选择:

 Microsoft.VisualStudio.ComponentModelHost 
 Microsoft.VisualStudio.Editor

【讨论】:

  • 感谢您在这里分享您的解决方案,请将其标记为答案,祝您有美好的一天:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多