我正在编写自己的Visual Studio扩展,我需要从Visual Studio编辑器中的选定文本中获取XPATH。
ActiveDocument是有效的XHTML文件,用户可以在其中选择编辑器中的随机行,而我可以使用xpath做一些魔术。
以下代码是Visual Studio扩展“ XPATH Tools”的一部分,该扩展正是我所需要的。如果构建扩展并打开XML文件,则TextViewCreated
会被触发,并且一切正常。但是,如果我将插件的某些部分导入到自己的插件中,则不会被触发,而我只是找不到原因。从我的角度来看,一切都是相同的。
我的计划是使用现有扩展的魔力,并将生成的XPATH字符串用于我的插件。
Constants.XmlContentTypeName
是“ XML”(也经过测试“ XHTML”)
[Export(typeof(IWpfTextViewCreationListener))]
[TextViewRole(PredefinedTextViewRoles.Document)]
[ContentType(Constants.XmlContentTypeName)]
internal class XmlTextViewCreationListener : IWpfTextViewCreationListener
{
private readonly XmlRepository _repository;
private readonly ActiveDocument _activeDocument;
public XmlTextViewCreationListener()
: this(Registry.Current.Get<XmlRepository>(), Registry.Current.Get<ActiveDocument>())
{
}
public XmlTextViewCreationListener(XmlRepository repository, ActiveDocument activeDocument)
{
_repository = repository;
_activeDocument = activeDocument;
}
public void TextViewCreated(IWpfTextView textView)
{
if(textView?.Caret == null)
{
return;
}
_repository.LoadXml(textView.TextSnapshot.GetText(), _activeDocument.AbsolutePath);
textView.Closed += ResetXml;
textView.Caret.PositionChanged += StoreCurrentNode;
}