void ScrollPages_PreviewMouseDown(object sender, MouseButtonEventArgs e)
 {
     ScrollPages.Focus();
 }
        public PDFRendererControl(PDFDocument pdf_document, bool remember_last_read_page, ZoomType force_zoom_type)
        {
            InitializeComponent();

            pdf_renderer_control_stats   = new PDFRendererControlStats(this, pdf_document);
            this.remember_last_read_page = remember_last_read_page;

            ObjPagesPanel.Background = ThemeColours.Background_Brush_Blue_LightToDark;

            PageRenderArea.SizeChanged += PDFRendererControl_SizeChanged;
            this.KeyUp             += PDFRendererControl_KeyUp;
            this.KeyDown           += PDFRendererControl_KeyDown;
            this.TextInput         += PDFRendererControl_TextInput;
            this.PreviewMouseWheel += PDFRendererControl_MouseWheel;

            ScrollPages.PreviewMouseDown += ScrollPages_PreviewMouseDown;
            ScrollPages.ScrollChanged    += ScrollPages_ScrollChanged;

            KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.None);
            KeyboardNavigation.SetDirectionalNavigation(ScrollPages, KeyboardNavigationMode.None);
            KeyboardNavigation.SetDirectionalNavigation(ObjPagesPanel, KeyboardNavigationMode.None);

            // Set the initial zoom
            ZoomType zoom_type = ZoomType.Other;

            switch (ConfigurationManager.Instance.ConfigurationRecord.GUI_LastPagesUp)
            {
            case "1":
                zoom_type = ZoomType.Zoom1Up;
                break;

            case "2":
                zoom_type = ZoomType.Zoom2Up;
                break;

            case "N":
                zoom_type = ZoomType.ZoomNUp;
                break;

            case "W":
                zoom_type = ZoomType.ZoomWholeUp;
                break;

            default:
                zoom_type = ZoomType.Zoom1Up;
                break;
            }

            // Is the zoomtype forced? (e.g. by the metadata panel or the sniffer)
            if (ZoomType.Other != force_zoom_type)
            {
                zoom_type = force_zoom_type;
            }

            PageZoom(zoom_type);

            // Add the child pages
            bool add_bells_and_whistles = pdf_renderer_control_stats.pdf_document.PDFRenderer.PageCount < 50;

            Logging.Info("+Creating child page controls");
            for (int page = 1; page <= pdf_renderer_control_stats.pdf_document.PDFRenderer.PageCount; ++page)
            {
                PDFRendererPageControl page_control = new PDFRendererPageControl(page, this, pdf_renderer_control_stats, add_bells_and_whistles);
                ObjPagesPanel.Children.Add(page_control);
            }
            Logging.Info("-Creating child page controls");

            Logging.Info("+Setting initial viewport");
            ReconsiderOperationMode(OperationMode.Hand);

            SetSearchKeywords();  // Eventually this should move into the reconsideroperationmode
            ScrollPages.Focus();

            Logging.Info("-Setting initial viewport");
        }
        public PDFRendererControl(PDFDocument pdf_document, bool remember_last_read_page, ZoomType force_zoom_type)
        {
            WPFDoEvents.AssertThisCodeIsRunningInTheUIThread();

            Theme.Initialize();

            InitializeComponent();

            //Unloaded += PDFRendererControl_Unloaded;
            Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;

            pdf_renderer_control_stats   = new PDFRendererControlStats(pdf_document);
            this.remember_last_read_page = remember_last_read_page;

            ObjPagesPanel.Background = ThemeColours.Background_Brush_Blue_LightToDark;

            PageRenderArea.SizeChanged += PDFRendererControl_SizeChanged;
            KeyUp             += PDFRendererControl_KeyUp;
            KeyDown           += PDFRendererControl_KeyDown;
            TextInput         += PDFRendererControl_TextInput;
            PreviewMouseWheel += PDFRendererControl_MouseWheel;

            ScrollPages.PreviewMouseDown += ScrollPages_PreviewMouseDown;
            ScrollPages.ScrollChanged    += ScrollPages_ScrollChanged;

            KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.None);
            KeyboardNavigation.SetDirectionalNavigation(ScrollPages, KeyboardNavigationMode.None);
            KeyboardNavigation.SetDirectionalNavigation(ObjPagesPanel, KeyboardNavigationMode.None);

            // Set the initial zoom
            ZoomType zoom_type = ZoomType.Other;

            switch (ConfigurationManager.Instance.ConfigurationRecord.GUI_LastPagesUp)
            {
            case "1":
                zoom_type = ZoomType.Zoom1Up;
                break;

            case "2":
                zoom_type = ZoomType.Zoom2Up;
                break;

            case "N":
                zoom_type = ZoomType.ZoomNUp;
                break;

            case "W":
                zoom_type = ZoomType.ZoomWholeUp;
                break;

            default:
                zoom_type = ZoomType.Zoom1Up;
                break;
            }

            // Is the zoom type forced? (e.g. by the metadata panel or the sniffer)
            if (ZoomType.Other != force_zoom_type)
            {
                zoom_type = force_zoom_type;
            }

            PageZoom(zoom_type);

            var doc = pdf_renderer_control_stats.pdf_document;

            SafeThreadPool.QueueUserWorkItem(o =>
            {
                // Add the child pages
                bool add_bells_and_whistles = (doc.PageCount > 0 && doc.PageCount < 50);

                WPFDoEvents.InvokeAsyncInUIThread(() =>
                {
                    Logging.Info("+Creating child page controls");
                    for (int page = 1; page <= doc.PageCount; ++page)
                    {
                        PDFRendererPageControl page_control = new PDFRendererPageControl(this, page, add_bells_and_whistles);
                        ObjPagesPanel.Children.Add(page_control);
                    }
                    Logging.Info("-Creating child page controls");
                });
            });

            Logging.Info("+Setting initial viewport");
            ReconsiderOperationMode(OperationMode.Hand);

            SetSearchKeywords();  // Eventually this should move into the ReconsiderOperationMode
            ScrollPages.Focus();

            Logging.Info("-Setting initial viewport");
        }