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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Criptare la comunicazione con mTLS in Azure Container Apps
Utilizzare Azure AI Studio per testare i modelli AI
C# 12: Cosa c'è di nuovo e interessante
Generare un hash con SHA-3 in .NET
Usare una container image come runner di GitHub Actions
Usare le navigation property in QuickGrid di Blazor
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Generare token per autenicarsi sulle API di GitHub
Creare una libreria CSS universale: i bottoni
Utilizzare un service principal per accedere a Azure Container Registry
Assegnare un valore di default a un parametro di una lambda in C#
I più letti di oggi
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- Chiamare direttamente un numero di telefono con HTML5
- Richiamare programmaticamente le operazioni di aggiornamento, eliminazione e inserimento di FormView, DetailsView e GridView