gpt4 book ai didi

c# - 如何在 Visual Studio 的 TextAdornment 模板中的编辑器中插入文本?

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:39 25 4
gpt4 key购买 nike

我按照本页中的步骤操作 http://blogs.msdn.com/b/visualstudio/archive/2009/12/09/building-and-publishing-an-extension-for-visual-studio-2010.aspx

我创建了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com