Nella versione 4 di Silverlight è stato inserito il supporto agli eventi del pulsante destro del mouse, la classe UIElement espone gli eventi MouseRightButtonDown e MouseRightButtonUp che possiamo gestire per intercettare il tasto destro del mouse così come siamo abituati ad effettuare per il tasto sinistro.
In Windows ed in molti alti sistemi operativi, il tasto destro del mouse è associato solitamente ad un menu contestuale, cioè un menu che espone delle funzioni in relazione al contesto e all'elemento su cui si è fatto click con il tasto destro; in Silverlight, grazie a questi eventi ed alla classe VisualTreeHelper, è molto semplice conoscere tale oggetto, vediamo un esempio:
public MainPage() { InitializeComponent(); this.MouseRightButtonDown +=new MouseButtonEventHandler(MainPage_MouseRightButtonDown); this.MouseRightButtonUp +=new MouseButtonEventHandler(MainPage_MouseRightButtonUp); } void MainPage_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { e.Handled = true; var v = VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(Application.Current.RootVisual), sender as UIElement); Control c = v.Where(u => u is Control && u != Application.Current.RootVisual).Cast<Control>().FirstOrDefault(); FrameworkElement f = v.Cast<FrameworkElement>().FirstOrDefault(); string msg = string.Empty; if (c != null) msg = String.Format("{0} {1}", c, c.Name); else msg = String.Format("{0} {1}", f, f.Name); MessageBox.Show(msg); } void MainPage_MouseRightButtonUp(object sender, MouseButtonEventArgs e) { e.Handled = true; }
Il metodo FindElementsInHostCoordinates di VisualTreeHelper permette di ottenere la lista degli UIElement presenti sotto un punto, all'interno dello spazio di un controllo.
Nell'esempio utilizziamo il metodo GetPosition del parametro MouseButtonEventArgs, passando come parametro il controllo Root dell'applicazione ed il sender stesso a cui sono associati gli eventi del mouse.
Data la lista degli oggetti, grazie a LINQ è molto semplice filtrare o cercare specifici oggetti e creare i propri menu in funzione del contesto su cui si è premuto il tasto destro.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire i dati con Azure Cosmos DB Data Explorer
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Ottimizzare le performance usando Span<T> e il metodo Split
La gestione della riconnessione al server di Blazor in .NET 9
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare Azure AI Studio per testare i modelli AI
Aggiornare a .NET 9 su Azure App Service
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Creare una libreria CSS universale: i bottoni
Introduzione ai web component HTML
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Fornire parametri ad un Web component HTML
I più letti di oggi
- Formati per l'impostazione del colore in CSS3
- Eseguire una chiamata AJAX per inviare dati al server in Angular 2
- Impostare un riferimento ad una entity collegata tramite foreign key
- la Call For Papert per #netconfit è aperta!invia la tua sessione da https://aspit.co/netconfit-20 puoi parlare di #net5, #aspnet5, #efcore5, #CSharp9 e tutto quello che ruota intorno a #dotnet.