2012-02-07 93 views
2

我正在從IWpfTextViewCreationListener界面監聽TextViewCreated。VS2010擴展 - 代碼定義窗口

我該如何使用IWpfTextView作爲參數來區分屬於「代碼定義窗口」的textview和普通的文本編輯器?

謝謝!

回答

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作爲接口)使用它。