VSPackage未激活文档

时间:2013-10-16 07:42:11

标签: c# visual-studio-2010 vspackage

我在我正在构建的扩展中使用这段代码(如here所示):

            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

  

将此窗口显示为可见,将窗口置于顶部,然后激活窗口。

我需要做些什么来使这个活动集中在打开的文档上?

1 个答案:

答案 0 :(得分:0)

弄清楚问题,与给定的代码无关,它与我有关{not} handling RoutedEvent触发了此代码的可能性,因此事件冒出来了到了父TreeViewItem,并试图将其折叠,最终导致ToolWindow再次获得焦点。