Пример #1
0
        public static Microsoft.VisualStudio.Text.Editor.IWpfTextView GetActiveTextView(System.IServiceProvider serviceProvider)
        {
            var monitorSelection = (Microsoft.VisualStudio.Shell.Interop.IVsMonitorSelection)serviceProvider.GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SVsShellMonitorSelection));

            if (monitorSelection == null)
            {
                return(null);
            }
            object curDocument;

            if (Microsoft.VisualStudio.ErrorHandler.Failed(monitorSelection.GetCurrentElementValue((uint)Microsoft.VisualStudio.VSConstants.VSSELELEMID.SEID_DocumentFrame, out curDocument)))
            {
                return(null);
            }

            Microsoft.VisualStudio.Shell.Interop.IVsWindowFrame frame = curDocument as Microsoft.VisualStudio.Shell.Interop.IVsWindowFrame;
            if (frame == null)
            {
                return(null);
            }

            object docView = null;

            if (Microsoft.VisualStudio.ErrorHandler.Failed(frame.GetProperty((int)Microsoft.VisualStudio.Shell.Interop.__VSFPROPID.VSFPROPID_DocView, out docView)))
            {
                return(null);
            }

            if (docView is Microsoft.VisualStudio.TextManager.Interop.IVsCodeWindow)
            {
                Microsoft.VisualStudio.TextManager.Interop.IVsTextView textView;
                if (Microsoft.VisualStudio.ErrorHandler.Failed(((Microsoft.VisualStudio.TextManager.Interop.IVsCodeWindow)docView).GetPrimaryView(out textView)))
                {
                    return(null);
                }

                var model          = (Microsoft.VisualStudio.ComponentModelHost.IComponentModel)serviceProvider.GetService(typeof(Microsoft.VisualStudio.ComponentModelHost.SComponentModel));
                var adapterFactory = model.GetService <Microsoft.VisualStudio.Editor.IVsEditorAdaptersFactoryService>();
                var wpfTextView    = adapterFactory.GetWpfTextView(textView);
                return(wpfTextView);
            }
            return(null);
        }