public bool posizionaFinestraPubblico()
        {
            // carico la eventuale geometria salvata nella configurazione
            // _pubblicoWindow.posizionamentoInCorso = true;

            // Come concordato con Ciccio, la finestra pubblico deve avere la stessa posizione di quella dello Slide Show
            // Quindi non ha una sua propria configurazione.
            GeometriaFinestra geomPub = (geomSS == null || geomSS.isEmpty()) ? Configurazione.creaGeometriaSlideShowDefault() : geomSS;

            // Primo tentativo
            bool esito;

            esito = posizionaFinestra(_pubblicoWindow, geomPub);

            // Secondo tentativo con default
            if (!esito)
            {
                geomPub = Configurazione.creaGeometriaSlideShowDefault();
                esito   = posizionaFinestra(_pubblicoWindow, geomPub);
            }

            // _pubblicoWindow.posizionamentoInCorso = false;

            return(esito);
        }
        /// <summary>
        /// Posiziono la finestra e la ridimensiono, per come indicato nella nuova geometria desiderata.
        /// Verifico anche che la geometria indicata sia proiettabile nello schermo (quindi che si interna)
        /// Per gestire lo stato di massimizzato, vedere descrizione qui:
        /// https://social.msdn.microsoft.com/Forums/vstudio/en-US/2ca2fab6-b349-4c08-915f-373c71bd636a/show-and-maximize-wpf-window-on-a-specific-screen?forum=wpf
        /// In pratica:
        /// in prima battuta visualizzo la finestra in stato normal. Poi dopo che questa si è caricata e visualizzata,
        /// tramite un evento, faccio chiamare una routine che la rende massimizzata.
        /// </summary>
        /// <param name="window">La finestra da ridimensionare/spostare</param>
        /// <param name="newGoem">La nuova posizione e dimensione desiderata</param>
        /// <returns>true se operazione a buon fine. false se condizioni errate</returns>

        public static bool posizionaFinestra(Window window, GeometriaFinestra newGoem)
        {
            bool esito = verificaProiettabile(newGoem);

            if (esito)
            {
                try {
                    // In prima battuta, devo visualizzare la finestra in stato normal
                    window.WindowState = WindowState.Normal;

                    // Nessun intervento di centratura automatico. Faccio tutto io manualmente su tutti i parametri
                    window.WindowStartupLocation = WindowStartupLocation.Manual;

                    // Screen[] _screens = Screen.AllScreens;
                    // System.Drawing.Rectangle rectangle1 = _screens[newGoem.deviceEnum].Bounds;
                    // System.Drawing.Rectangle rectangle2 = _screens[newGoem.deviceEnum].WorkingArea;

                    window.Left   = newGoem.Left;
                    window.Top    = newGoem.Top;
                    window.Width  = newGoem.Width;
                    window.Height = newGoem.Height;

                    if (newGoem.fullScreen)
                    {
                        window.Loaded += Window_Loaded_posizionaFinestraFullScreen;
                    }

                    esito = true;
                } catch (Exception) {
                    esito = false;
                }
            }

            return(esito);
        }
        /// <summary>
        /// Posiziono la finestra dello slide show sul monitor primario,
        /// con una dimensione che sicuramente è visibile (cioè con una geometria di default)
        /// </summary>
        internal void normalizzareFinestraSlideShowSulMonitor1()
        {
            // Per prima cosa apro la finestra se questa è chiusa
            aprireFinestraSlideShow();

            // Creo una geometria dalle dimensioni del monitor.
            GeometriaFinestra geo = Configurazione.creaGeometriaSlideShowDefault();

            posizionaFinestra(_slideShowWindow, geo);
        }
 /// <summary>
 /// Uso lo schermo indicato nella geometria stessa
 /// </summary>
 /// <param name="geom"></param>
 /// <returns></returns>
 public static bool verificaProiettabile(GeometriaFinestra geom)
 {
     // Verifico se lo schermo indicato esiste ancora. Potrebbe essere stato scollegato
     if (geom.deviceEnum >= 0 && geom.deviceEnum < Screen.AllScreens.Count())
     {
         return(verificaProiettabile(WpfScreen.GetScreenFrom(geom.deviceEnum), geom));
     }
     else
     {
         return(false);
     }
 }
        /// <summary>
        /// Controllo se la geometria indicata è "interna" allo schermo indicato.
        ///
        /// </summary>
        /// <param name="scr">Schermo su cui disegnare. Esiste di sicuro</param>
        /// <param name="gf">Geometria della finestra da aprire nello schermo</param>
        /// <returns>true se la finestra è interna allo schermo (quindi ci sta)</returns>
        public static bool verificaProiettabile(WpfScreen scr, GeometriaFinestra gf)
        {
            bool proiettabile = true;

            if (gf.fullScreen)
            {
                return(true);
            }

            if (proiettabile && gf.isEmpty())
            {
                proiettabile = false;
            }

            if (proiettabile && gf.Left < 0)
            {
                proiettabile = false;
            }

            if (proiettabile && gf.Top < 0)
            {
                proiettabile = false;
            }

            if (proiettabile && gf.Width <= 10)
            {
                proiettabile = false;
            }

            if (proiettabile && gf.Height <= 10)
            {
                proiettabile = false;
            }

            if (proiettabile && gf.deviceEnum == WpfScreen.Primary.deviceEnum && (gf.Height + gf.Top > scr.WorkingArea.Height || gf.Width + gf.Left > scr.WorkingArea.Width))
            {
                proiettabile = false;
            }

            if (proiettabile && gf.deviceEnum != WpfScreen.Primary.deviceEnum && (gf.Height + gf.Top - scr.DeviceBounds.Y > scr.WorkingArea.Height || gf.Width + gf.Left - scr.DeviceBounds.X > scr.WorkingArea.Width))
            {
                proiettabile = false;
            }

            return(proiettabile);
        }
        /// <summary>
        /// Data una Window, estraggo i dati del suo posizionamento.
        /// </summary>
        /// <param name="window">La finestra da analizzare</param>
        /// <returns>La Geometria che rappresenta la sua posizione</returns>
        public static GeometriaFinestra creaGeometriaDaWindow(Window window)
        {
            WpfScreen scr = WpfScreen.GetScreenFrom(window);

            GeometriaFinestra geo = new GeometriaFinestra();

            geo.Left = (int)window.Left;
            geo.Top  = (int)window.Top;


            // In certi casi il valore è NaN
            // http://stackoverflow.com/questions/11013316/get-the-height-width-of-window-wpf
            if (Double.IsNaN(window.Width))
            {
                geo.Width = (int)window.ActualWidth;
            }
            else
            {
                geo.Width = (int)window.Width;
            }

            // In certi casi il valore è NaN
            // http://stackoverflow.com/questions/11013316/get-the-height-width-of-window-wpf
            if (Double.IsNaN(window.Height))
            {
                geo.Height = (int)window.ActualHeight;
            }
            else
            {
                geo.Height = (int)window.Height;
            }



            geo.Height = (int)window.Height;
            geo.Width  = (int)window.Width;

            geo.fullScreen = window.WindowState == WindowState.Maximized;
            geo.deviceEnum = scr.deviceEnum;

            return(geo);
        }
        /// <summary>
        /// Massimizzo la finestra indicata sul monitor secondario
        /// </summary>
        internal void massimizzareFinestraSlideShowSulMonitor2()
        {
            // Adesso calcolo la posizione del monitor 2
            WpfScreen scrn = WpfScreen.AllScreens().Where(s => s.IsPrimary == false).FirstOrDefault();

            if (scrn != null)
            {
                // Per prima cosa apro la finestra se questa è chiusa
                aprireFinestraSlideShow();

                // Creo una geometria dalle dimensioni del monitor.
                GeometriaFinestra geo = creaGeometriaDaScreen(scrn);
                posizionaFinestra(_slideShowWindow, geo);

                massimizzareFinestraSlideShow();
            }
            else
            {
                _giornale.Warn("E' stato chiesto di usare il monitor secondario ma questo non è presente");
            }
        }