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
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Ricevere notifiche sui test con Azure Load Testing
Creare agenti facilmente con Azure AI Agent Service
Creare una custom property in GitHub
Selettore CSS :has() e i suoi casi d'uso avanzati
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Managed deployment strategy in Azure DevOps
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Recuperare l'ultima versione di una release di GitHub
Eseguire script pre e post esecuzione di un workflow di GitHub
I più letti di oggi
- #lightswitch 2012 supporta nativamente #html5, #jquery e #jquerymobile. è stato mostrato girare su #ipad a #msteched
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Velocity arriva alla CTP3
- Mono 2.8 aggiunge .NET Framework 4, ASP.NET 4.0 e MVC 2
- Prima CTP per Portable Library Tools
- VS 2005 CTP già su MSDN Universal
- Microsoft aggiorna WinFS beta 1 per VS 2005
- Information Card Kits for ASP.NET and HTML
- Web Camp - HTML5 per il web di oggi
- Una preview della prossima versione di #VisualStudio con cui creare #metrostyle app http://aspitalia.com/build-win8 #BldWin