IWpfTextViewCreationListener.TextViewCreated не запущен - PullRequest
0 голосов
/ 30 октября 2018

Я пишу свое собственное расширение 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;
    }

1 Ответ

0 голосов
/ 30 октября 2018

Это решило проблему. Событие теперь срабатывает правильно.

...