在我的分类器类中,我有一个包含以下代码的方法:
var handler = ClassificationChanged;
if (handler != null)
{
IVsTextManager textManager = (IVsTextManager)ServiceProvider.GlobalProvider.GetService(typeof(SVsTextManager));
IVsTextView vTextView = null;
int mustHaveFocus = 1;
textManager.GetActiveView(mustHaveFocus, null, out vTextView);
IVsUserData userData = vTextView as IVsUserData;
if (userData != null)
{
IWpfTextViewHost viewHost;
object holder;
Guid guidViewHost = DefGuidList.guidIWpfTextViewHost;
userData.GetData(ref guidViewHost, out holder);
viewHost = (IWpfTextViewHost)holder;
IWpfTextView textView = viewHost.TextView;
ITextSnapshot textSnapshot = textView.TextSnapshot;
SnapshotSpan span = new SnapshotSpan(textSnapshot, 0, textSnapshot.Length);
var eventArgs = new ClassificationChangedEventArgs(span);
handler(this, eventArgs);
}
}
当我调用我的方法时,getclassificationspan不会被调用。我不明白为什么。我做错了什么吗?当没有发生编辑时,我如何强制Visual Studio调用getclassificationspan并将分类格式重新应用于代码?
我按照SLaks的建议查看了TextBuffer,它让我找到了解决方案。我在代码的其他地方引用了我的分类器来调用问题中提到的方法。然而,它被证明是对另一个具有不同TextBuffer的分类器的引用。我确保引用是正确的,现在一切都正常工作。