Memorizzare posizione e dimensioni della finestra di una applicazione OOB Silverlight 4.0

di Alessio Leoncini, in Silverlight 4.0, Out of browser,

Negli script precedenti abbiamo visto come un'applicazione out-of-browser, in esecuzione con privilegi elevati (full-trust), ci consenta di avere maggiori possibilità di controllo sul layout ed in generale sull'applicazione stessa.
Oltre a WindowState, esposta da Application.Current.MainWindow, abbiamo la possibilià di impostare larghezza, altezza e posizione della finestra rispettivamnetre con le proprietà Width, Height, Left e Top. Il loro utilizzo risulta molto utile per memorizzare posizione e dimensioni della finestra scelte dall'utente, in modo da ripristinarle alla successiva riapertura.

Al momento della chiusura possiamo registrare queste impostazioni nello storage locale attraverso la classe IsolatedStorageSettings:

if (Application.Current.IsRunningOutOfBrowser && Application.Current.HasElevatedPermissions)
{
   bool confirm = MessageBox.Show("Conferma la chiusura?", "", MessageBoxButton.OKCancel) == MessageBoxResult.OK;

   if (confirm)
   {
      IsolatedStorageSettings.ApplicationSettings["MainWidth"] = Application.Current.MainWindow.Width;
      IsolatedStorageSettings.ApplicationSettings["MainHeight"] = Application.Current.MainWindow.Height;
      IsolatedStorageSettings.ApplicationSettings["MainLeftPos"] = Application.Current.MainWindow.Left;
      IsolatedStorageSettings.ApplicationSettings["MainTopPos"] = Application.Current.MainWindow.Top;
      IsolatedStorageSettings.ApplicationSettings["WindowState"] = Application.Current.MainWindow.WindowState;

      Application.Current.MainWindow.Close();
   }
}

Nel costruttorre dello UserControl principale possiamo accedere a tali informazioni ed effettuare il settig dei valori recuperati:

public MainPage()
{
   InitializeComponent();

   if (Application.Current.IsRunningOutOfBrowser && Application.Current.HasElevatedPermissions)
   {
      WindowState windowState = WindowState.Normal;
      if (IsolatedStorageSettings.ApplicationSettings.Contains("WindowState"))
         windowState = (WindowState)IsolatedStorageSettings.ApplicationSettings["WindowState"];

      if (windowState != WindowState.Maximized)
      {
         if (IsolatedStorageSettings.ApplicationSettings.Contains("MainLeftPos"))
            Application.Current.MainWindow.Left =
               (double)IsolatedStorageSettings.ApplicationSettings["MainLeftPos"];

         if (IsolatedStorageSettings.ApplicationSettings.Contains("MainTopPos"))
            Application.Current.MainWindow.Top =
               (double)IsolatedStorageSettings.ApplicationSettings["MainTopPos"];

         if (IsolatedStorageSettings.ApplicationSettings.Contains("MainWidth"))
            Application.Current.MainWindow.Width =
               (double)IsolatedStorageSettings.ApplicationSettings["MainWidth"];

         if (IsolatedStorageSettings.ApplicationSettings.Contains("MainHeight"))
            Application.Current.MainWindow.Height =
               (double)IsolatedStorageSettings.ApplicationSettings["MainHeight"];
      }
      else
      {
         Application.Current.MainWindow.WindowState = windowState;
      }
   }
}

Il setting della posizione può essere fatto solo prima dell'evento Loaded; inoltre, come evidenziato nel codice, qualora il precedente stato della finestra fosse stato Maximized, non è necessario impostare alcuno dei valori memorizzati.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi