IWpfTextViewCreationListener.TextViewCreated未触发

时间:2018-10-30 11:08:46

标签: c# wpf visual-studio visual-studio-extensions

我正在编写自己的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;
    }

1 个答案:

答案 0 :(得分:0)

This解决了问题。现在已正确触发事件。