VS2010扩展 - 代码定义窗口

时间:2012-02-07 15:14:22

标签: c# visual-studio-2010 vsix

我正在从IWpfTextViewCreationListener界面收听TextViewCreated。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

这是完成此任务的基本代码。

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作为服务类型,并使用{{1}}作为接口。