我正在从IWpfTextViewCreationListener界面收听TextViewCreated。

如何使用作为参数的IWpfTextView区分属于“代码定义窗口”的textview和常规文本编辑器?

谢谢!

最佳答案

这是完成此操作的基本代码。

static bool IsCodeDefWindow(
    IWpfTextView textView,
    IVsEditorAdaptersFactoryService editorAdaptersFactoryService,
    IVsCodeDefView vsCodeDefView)
{
    var vsTextView = editorAdaptersFactoryService.GetViewAdapter(textView);
    if (vsTextView == null)
    {
        // Happens for unshimmed IWpfTextView instances
        return false;
    }

    int isCodeDef;
    return
        ErrorHandler.Succeeded(vsCodeDefView.IsCodeDefView(vsTextView, out isCodeDef)) &&
        isCodeDef != 0;
}


IVsEditorAdaptersFactoryService是MEF可导入的组件,因此可以通过您的MEF容器上的[Import]使用。

IVsCodeDefView是较旧的Visual Studio服务。如果有IServiceProvider,则可以通过QueryService使用它(请确保使用SVsServiceProvider作为服务类型,并使用IVsServiceProvider作为接口)。

关于c# - VS2010扩展-代码定义窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9178728/

10-12 17:18