2

我正在从IWpfTextViewCreationListener界面监听 TextViewCreated。

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

谢谢!

4

1 回答 1

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 可导入组件,因此可通过[Import]您的 MEF 容器使用。

IVsCodeDefView是一个较旧的 Visual Studio 服务。如果您有IServiceProvider它可以通过QueryService(确保SVsServiceProvider用作服务类型和IVsServiceProvider接口)。

于 2012-02-07T19:33:30.633 回答