L'interfaccia grafica delle applicazioni può diventare complicata in breve tempo e spesso si rischia di avere centinaia di componenti da dover disegnare a schermo: talvolta i dati e i componenti della UI possono essere semplificati tramite l'uso di liste o di template, mentre molte altre volte ci sono elementi scorrelati e che vogliamo comunque mostrare all'interno della view. Per questo interviene il controllo ScrollViewer, che crea una sorta di canvas che ci permette di disegnare controlli all'infinito, garantendoci la visibilità di tutti tramite l'uso delle scrollbar sia verticale che orizzontale.
Si può raggiungere ed effettuare lo scroll automatico ad un elemento posto in fondo allo ScrollViewer, o in una qualsiasi altra posizione all'interno di esso, tramite il metodo ChangeView (che va a rimpiazzare il deprecato ScrollToVerticalOffset) e conoscendo l'elemento di destinazione:
public static void ScrollToElement(this ScrollViewer scrollViewer, UIElement element) { var transform = element.TransformToVisual((UIElement)scrollViewer.Content); var position = transform.TransformPoint(new Point(0, 0)); scrollViewer.ChangeView(null, position.Y, null, false); }
In questo caso si è fatto uso di un extension method in modo da poter riciclare la funzionalità per tutti i controlli ScrollViewer presenti nell'applicazione. Supponendo un layout tipo quello mostrato nell'esempio di seguito:
<ScrollViewer x:Name ="MyScrollView"> <Grid x:Name="ContentsPanel"> <TextBlock x:Name="TB1" /> <TextBlock x:Name="TB2" /> <Button x:Name="MyButton" /> </Grid> </ScrollViewer>
Per raggiungere il pulsante MyButton sarà sufficiente lanciare questa istruzione:
MyScrollView.ScrollToElement(MyButton);
Nell'esempio mostrato, lo scrolling avviene solamente in modalità verticale, ma non è complesso aggiungere il supporto anche per lo scrolling orizzontale ad un elemento. Basterà infatti cambiare i parametri passati al metodo ChangeView in modo che venga presa anche la coordinata X.
Il codice sorgente di questo script è disponibile su GitHub al seguente indirizzo https://github.com/aspitalia/scripts-windows/tree/master/script-207
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Effettuare il refresh dei dati di una QuickGrid di Blazor
Creare una libreria CSS universale: Immagini
Triggerare una pipeline su un altro repository di Azure DevOps
Utilizzare Copilot con Azure Cosmos DB
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Ottimizzazione dei block template in Angular 17
Path addizionali per gli asset in ASP.NET Core MVC
Proteggere le risorse Azure con private link e private endpoints
Utilizzare Azure Cosmos DB con i vettori
Gestione degli stili CSS con le regole @layer
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
I più letti di oggi
- Microsoft aggiorna WinFS beta 1 per VS 2005
- Utilizzare CLEditor per consentire l'input di HTML in ASP.NET MVC
- Build 2015: segui con noi tutte le novità per gli sviluppatori in diretta da San Francisco
- VS 2005 e SQL Server 2005 Express da scaricare
- WS-I approva Basic Profile 1.0
- Utilizzare il metodo reduce in JavaScript