1

これはやや風変わりな質問ですが、とにかく試してみます。

MEF を使用して Visual Studio 2010 拡張機能を作成しています。コードのある時点で、ドキュメントを保存するたびにエラー グリフ ( Brakepoints など) を提供する必要があります。問題は、ユーザーが何も書かずに強制的に呼び出されるGetTagsようにする方法を見つけることができないように見えることです。ITagger

ドキュメント保存イベントをキャッチできますが、これと何らかの方法で呼び出されるメソッドとの間の「リンク」がありGetTagsません。何か案は?

ここにいくつかのコードがあります:

internal class RTextErrorTag : IGlyphTag
    {}

    class RTextErrorGlyphTagger : ITagger<RTextErrorTag>
    {
        private IClassifier mClassifier;
        private SimpleTagger<ErrorTag> mSquiggleTagger;
        private EnvDTE._DTE mMSVSInstance = null;
        private List<object> mDTEEvents = new List<object>();

        internal RTextErrorGlyphTagger(IClassifier classifier, IErrorProviderFactory squiggleProviderFactory, ITextBuffer buffer, IServiceProvider serviceProvider)
        {
            this.mClassifier = classifier;
            this.mSquiggleTagger = squiggleProviderFactory.GetErrorTagger(buffer);
            mMSVSInstance = serviceProvider.GetService(typeof(EnvDTE._DTE)) as EnvDTE._DTE;
            var eventHolder = mMSVSInstance.Events.DocumentEvents;
            mDTEEvents.Add(eventHolder);
            eventHolder.DocumentSaved += new EnvDTE._dispDocumentEvents_DocumentSavedEventHandler(OnDocumentSaved);
        }

        void OnDocumentSaved(EnvDTE.Document Document)
        {
            //fire up event to renew glyphs - how to force GetTags method?
            var temp = this.TagsChanged;
            if (temp != null)
                temp(this, new SnapshotSpanEventArgs(new SnapshotSpan() )); //how to foce get
        }

        IEnumerable<ITagSpan<RTextErrorTag>> ITagger<RTextErrorTag>.GetTags(NormalizedSnapshotSpanCollection spans)
        {
            foreach (SnapshotSpan span in spans)
            {
                foreach (var error in this.mSquiggleTagger.GetTaggedSpans(span))
                {
                    yield return new TagSpan<RTextErrorTag>(new SnapshotSpan(span.Start, 1), new RTextErrorTag());
                }
            }
        }

        public event EventHandler<SnapshotSpanEventArgs> TagsChanged; 
    }
4

0 に答える 0