我按照此页面中的步骤http://blogs.msdn.com/b/visualstudio/archive/2009/12/09/building-and-publishing-an-extension-for-visual-studio-2010.aspx如何在Visual Studio的TextAdornment模板中的编辑器中插入文本?
我创建了一个TextAdornment项目和一个搜索框。我想在这个页面做一些不同的事情。我想查询一个链接,在WPF用户控件中获取一个列表,然后将该信息写回编辑器。所以问题是我不知道如何将文本写回到seachbox(WPF用户控件)的编辑器中? 我搜索了很多,得到的方式来使用的代码如下所示:
IVsTextManager txtMgr = (IVsTextManager)GetService(typeof(SVsTextManager));
IVsTextView vTextView = null;
int mustHaveFocus = 1;
txtMgr.GetActiveView(mustHaveFocus, null, out vTextView);
IVsUserData userData = vTextView as IVsUserData;
if (userData == null)
{
return null;
}
else
{
IWpfTextViewHost viewHost;
object holder;
Guid guidViewHost = DefGuidList.guidIWpfTextViewHost;
userData.GetData(ref guidViewHost, out holder);
viewHost = (IWpfTextViewHost)holder;
return viewHost;
}
然而,这种方法“GetService的”也说没有找到。我认为这是VSPackage的原因。并不适合装饰项目。
请帮忙指出如何从WPF用户控件将文本写回编辑器。谢谢!
============================================== ========================================
解决方案: when创建SearchBox(WPF用户控件),通过IWpfTextView传递给WPF控件,然后可以在SearchBox.xaml.cs中使用它。还需要注意使用Dispatcher函数来保持UI线程是活动的。
Dispatcher.Invoke(new Action(() =>
{
ITextEdit edit = _view.TextBuffer.CreateEdit();
ITextSnapshot snapshot = edit.Snapshot;
int position = snapshot.GetText().IndexOf("gist:");
edit.Delete(position, 5);
edit.Insert(position, "billmo");
edit.Apply();
}));
感谢您的回答。但我想我需要澄清我的问题。在创建TextAdornment模板之后,确实有两个类“TextAdornment.cs”和“TextAdornmentFactory.cs”。然后,按照我的问题中的链接,我在此项目中添加一个WPF用户控件。我的问题是,我想从这个WPF用户控件中触发一个操作(在编辑器中添加一些文本),我认为我的代码应该写入此WPF用户控件的类中。所以这是问题。我如何从这个WPF控件将文本添加到编辑器中。 – Ling
您的意思是您想要在编辑器中获取文本并将其复制到WPF控件,或者您希望WPF控件能够将文本插入到编辑器中? –
我希望WPF控件能够将文本插入编辑器 – Ling