Я пишу свое собственное расширение Visual Studio, и мне нужно получить XPATH из выделенного текста в редакторе Visual Studio.
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;
}