2013-10-16 79 views
0

我在擴展使用的代碼(從here看到的)這一點,我的建築:(根據崗位)VSPackage的未激活文件

  IVsUIShellOpenDocument openDoc = Package.GetGlobalService(typeof(IVsUIShellOpenDocument)) as IVsUIShellOpenDocument; 
      if (openDoc == null) { 
       return; 
      } 

      IVsWindowFrame frame; 
      Microsoft.VisualStudio.OLE.Interop.IServiceProvider sp; 
      IVsUIHierarchy hier; 
      uint itemid; 
      Guid logicalView = VSConstants.LOGVIEWID_Code; 
      if (ErrorHandler.Failed(openDoc.OpenDocumentViaProject(path, ref logicalView, out sp, out hier, out itemid, out frame)) || frame == null) { 
       return; 
      } 

      object docData; 
      frame.GetProperty((int)__VSFPROPID.VSFPROPID_DocData, out docData); 

      // Get the VsTextBuffer 
      VsTextBuffer buffer = docData as VsTextBuffer; 
      if (buffer == null) { 
       IVsTextBufferProvider bufferProvider = docData as IVsTextBufferProvider; 
       if (bufferProvider != null) { 
        IVsTextLines lines; 
        ErrorHandler.ThrowOnFailure(bufferProvider.GetTextBuffer(out lines)); 
        buffer = lines as VsTextBuffer; 
        Debug.Assert(buffer != null, "IVsTextLines does not implement IVsTextBuffer"); 

        if (buffer == null) { 
         return; 
        } 
       } 
      } 

      // Finally, perform the navigation. 
      IVsTextManager mgr = Package.GetGlobalService(typeof(VsTextManagerClass)) as IVsTextManager; 
      if (mgr == null) { 
       return; 
      } 
      mgr.NavigateToLineAndColumn(buffer, ref logicalView, line, column, line, column); 

其中,應打開我的文檔,如果還沒有,並將文檔集中,將光標放在指定位置。雖然這一切都有效,但似乎沒有工作的東西是文檔的焦點,我的ToolWindow仍然具有活動焦點(即黃色突出顯示的頭部欄),我試圖在NavigateToLineAndColumn之後放置此行,以查看它是否存在我所期望的,但仍然沒有骰子:

frame.Show()

它根據MSDN

呈現該窗口可見,將窗口頂部,並激活窗口。

我需要做更多的工作,才能使這項活動集中於打開的文檔?

回答

0

想通了這個問題,是無關的給定的代碼,這是我不handling做這引發關閉此代碼的可能性,並因此事件冒泡到父TreeViewItem,並試圖將RoutedEvent將其摺疊,最後ToolWindow重新聚焦。