Uno dei benefici dell'interop tra il Composition Engine e lo XAML è l'aggiunta di nuove API che ci consentono di utilizzare il Composition Engine direttamente nello XAML.
Ad esempio, creando una classe che estende il tipo XamlCompositionBrushBase è possibile creare qualsiasi effetto, come ad esempio invertire il disegno del brush:
public class InvertBrush : XamlCompositionBrushBase { protected override void OnConnected() { if (CompositionBrush == null) { // creiamo lo sfondo, con ciò che è dietro l'UI element var backdrop = Window.Current.Compositor.CreateBackdropBrush(); // controlliamo le capabilities: se gli effetti non sono supportati usciamo if (!CompositionCapabilities.GetForCurrentView().AreEffectsSupported()) { return; } // Creiamo l'effetto // usiamo Win2D in particolare l'InvertEffect e usiamo il BackdropBrush come sorgente var invertEffect = new InvertEffect { Source = new CompositionEffectSourceParameter("backdrop"); }; // facciamo il setup dell'EffectFactory var effectFactory = Window.Current.Compositor.CreateEffectFactory(invertEffect); // e infine creiamo il CompositionEffectBrush var effectBrush = effectFactory.CreateBrush(); // impostiamo la sorgente effectBrush.SetSourceParameter("backdrop", backdrop); // e infine assegniamo la CompositionBrush CompositionBrush = effectBrush; } } protected override void OnDisconnected() { // facciamo pulizia CompositionBrush?.Dispose(); CompositionBrush = null; } }
E infine nello XAML creiamo il brush vero e proprio:
<Grid> <Grid.Background> <ImageBrush ImageSource="ms-appx:///Images/myImage.png"/> </Grid.Background> <Grid Width="250" Height="250" HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid.Background> <brushes:InvertBrush /> </Grid.Background> </Grid> </Grid>
Creare un effetto custom non è semplice, per questo motivo ne possiamo trovare alcuni già pronti come, ad esempio, RevealBrush, RevealBorderBrush, RevealBackgroundBrush e infine AcrylicBrush, che riveste un ruolo importantissimo nel nuovo Fluent Design System di Microsoft, perché aggiunge un effetto di trasparenza acrilica, già pronto per l'utilizzo.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
.NET Conference Italia 2023
Specificare il versioning nel path degli URL in ASP.NET Web API
Utilizzare la session affinity con Azure Container Apps
Usare le collection expression per inizializzare una lista di oggetti in C#
Miglioramenti nell'accessibilità con Angular CDK
Eseguire attività con Azure Container Jobs
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Utilizzare la libreria Benchmark.NET per misurare le performance
Effettuare il binding di date in Blazor
Implementare l'infinite scroll con QuickGrid in Blazor Server
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Utilizzare politiche di resiliency con Azure Container App