2012-12-09 105 views
2

我按照此页面中的步骤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(); 
     })); 

回答

2

你必须有,如果你在一个包,你正在试图找出什么观点是当前活动的代码......这是矫枉过正你想要做什么。

假设您从TextAdornment模板开始,装饰对象在构造函数中被赋予一个IWpfTextView。 (如果没有,你可能有一个实现了IWpfTextCreationListener.TextViewCreated的东西,并且你需要把它穿过。)IWpfTextView派生了一个ITextView,它有一个属性ITextBuffer。从这里,你可以调用CreateEdit()并从那里编辑文本。

+0

感谢您的回答。但我想我需要澄清我的问题。在创建TextAdornment模板之后,确实有两个类“TextAdornment.cs”和“TextAdornmentFactory.cs”。然后,按照我的问题中的链接,我在此项目中添加一个WPF用户控件。我的问题是,我想从这个WPF用户控件中触发一个操作(在编辑器中添加一些文本),我认为我的代码应该写入此WPF用户控件的类中。所以这是问题。我如何从这个WPF控件将文本添加到编辑器中。 – Ling

+0

您的意思是您想要在编辑器中获取文本并将其复制到WPF控件,或者您希望WPF控件能够将文本插入到编辑器中? –

+0

我希望WPF控件能够将文本插入编辑器 – Ling

相关问题