Nello script precedente abbiamo visto come aggiungere un Flyout ad un controllo che eredita dalla classe Button. Per impostazione predefinita, il Flyout si chiude solo se l'utente clicca fuori dall'area che occupa. Spesso, per esigenze di UX, è necessario chiudere il Flyout alla pressione di un bottone, chiudendolo programmaticamente.
Nell'esempio che segue utilizziamo un'attached property per recuperare il Popup che contiene il Flyout.
namespace MyApp { public class CloseFlyoutAttachedBehavior : DependencyObject { public static bool GetCloseFlyout(DependencyObject obj) { return (bool)obj.GetValue(CloseFlyoutProperty); } public static void SetCloseFlyout(DependencyObject obj, bool value) { if (obj is Button) { ((Button)obj).Click += CloseFlyoutAttachedBehaviorClick; } } static void CloseFlyoutAttachedBehaviorClick(object sender, RoutedEventArgs e) { var flyout = ((Button)sender).GetFirstAncestorOfType<FlyoutPresenter>(); if (flyout != null) { ((Popup)flyout.Parent).IsOpen = false; } } public static readonly DependencyProperty CloseFlyoutProperty = DependencyProperty.RegisterAttached("CloseFlyout", typeof(bool), typeof(CloseFlyoutAttachedBehavior), new PropertyMetadata(true)); } }
Una volta impostata la proprietà CloseFlyout, viene invocato il metodo SetCloseFlyout, in cui registriamo un handler per l'evento Click del bottone che, useremo per chiudere il Flyout. L'event handler CloseFlyoutAttachedBehaviorClick percorrerà il visual tree fino a recuperare il FlyoutPresenter: a causa della composizione del VisualTree, non è possibile recuperare direttamente il controllo Flyout, quindi dal FlyoutPresenter recuperiamo il Popup che è utilizzato per visualizzare il contenuto del Flyout, utilizzando la proprietà Parent. Per concludere, non ci rimane che impostare la proprietà IsOpen su false.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Creare una libreria CSS universale: Nav menu
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Eliminare record doppi in Sql Server
Testare il failover sulle region in Azure Storage
Configurare automaticamente un webhook in Azure DevOps
Recuperare App Service cancellati su Azure
Proteggere le risorse Azure con private link e private endpoints
Abilitare automaticamente il force push di un gruppo su Azure DevOps
La gestione della riconnessione al server di Blazor in .NET 9
Disabilitare le run concorrenti di una pipeline di Azure DevOps
I più letti di oggi
- The Agentic Day - Milano
- Tutorial LINQ
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Invocare trigger non HTTP delle Azure Function durante lo sviluppo
- Adattare i contenuti per il mobile con il meta-tag ViewPort e HTML5
- Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web