- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建了一个 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();
}));
最佳答案
如果您在一个包中并且您正在尝试找出当前处于事件状态的 View ,那么您拥有的代码...对于您正在尝试做的事情来说,这太过分了。
假设您从 TextAdornment 模板开始,在构造函数中为装饰对象提供了一个 IWpfTextView。 (如果没有,您可能有一个 IWpfTextCreationListener.TextViewCreated
的实现,它得到了它,您需要将它穿插。)IWpfTextView 派生出具有属性 ITextBuffer 的 ITextView。从这里,您可以调用 CreateEdit() 并从那里编辑文本。
关于c# - 如何在 Visual Studio 的 TextAdornment 模板中的编辑器中插入文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788221/
我是一名优秀的程序员,十分优秀!