我需要使用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扩展名DefGuidList.guidIWpfTextViewHost时丢失。所以我不能再获得IWpfTextView了。

请帮我。
谢谢大家。

最佳答案

在谢尔盖·弗拉索夫(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);
}


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

 Microsoft.VisualStudio.ComponentModelHost
 Microsoft.VisualStudio.Editor

关于c# - 如何从命令Visual Studio Extension 2017获取IWpfTextView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45751908/

10-13 06:02