如何从命令 Visual Studio Extension 2017 获取 IWpfTextView
How to get IWpfTextView from command Visual Studio Extension 2017
我需要使用 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
我需要使用 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