如何从命令Visual Studio Extension 2017获取IWpfTextView

时间:2017-08-18 08:20:26

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

我需要显示弹出窗口使用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了。

请帮帮我。 谢谢大家。

1 个答案:

答案 0 :(得分:1)

谢尔盖·弗拉索夫回答后,我找到了一个解决方案:

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);
}

您必须通过添加参考添加一些参考手册 - &gt;装配 - &gt;扩展。然后选择:

 Microsoft.VisualStudio.ComponentModelHost 
 Microsoft.VisualStudio.Editor