我创建了一个 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 用户控件写回编辑器。谢谢!
==================================================== =====================================
解决方法: 在创建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();
}));