Nel recente update di Ottobre 2018 di Windows 10, è stato introdotto un nuovo set di API pensato per ottenere il massimo delle performace e un miglior uso della GPU.
Questo nuovo set di API si trova sotto il namespace Windows.UI.Xaml.Core.Direct e permette di creare l'UI non attraverso i classici tipi definiti con XAML, ma attraverso oggetti che implementano IXamlDirectObjects.
Prendiamo ad esempio il seguente XAML:
<Grid x:Name="RootGrid"> <Border BorderBrush="Black" BorderThickness="5"> <Rectangle Height="100" Width="100" Fill="Red" /> </Border> </Grid>
Lo stesso codice può essere scritto anche utilizzando la sintassi imperativa:
Border border = new Border(); border.BorderBrush = new SolidColorBrush(Colors.Black); border.BorderThickness = new Thickness(5); Rectangle rectangle = new Rectangle(); rectangle.Height = 100; rectangle.Width = 100; SolidColorBrush rectBrush = new SolidColorBrush(Colors.Red); rectangle.Fill = rectBrush; border.Child = rectangle; RootGrid.Children.Add(border);
Le performace però sono pressoché identiche a quelle ottenute con lo XAML. Di seguito vediamo come ottenere il massimo delle performance. riscrivendo le istruzioni precedenti, questa volta utilizzando il nuovo set di API:
XamlDirectObject border = XamlDirect.CreateInstance(XamlTypeIndex.Border); XamlDirect.SetThicknessProperty(border, XamlPropertyIndex.Border_BorderThickness, new Thickness(5)); IXamlDirectObject borderBrush = XamlDirect.CreateInstance(XamlTypeIndex.SolidColorBrush); XamlDirect.SetColorProperty(borderBrush, XamlPropertyIndex.SolidColorBrush_Color, Colors.Black); XamlDirect.SetXamlDirectObjectProperty(border, XamlPropertyIndex.Border_BorderBrush, borderBrush); IXamlDirectObject rectangle = XamlDirect.CreateInstance(XamlTypeIndex.Rectangle); XamlDirect.SetDoubleProperty(rectangle, XamlPropertyIndex.FrameworkElement_Width, 100); XamlDirect.SetDoubleProperty(rectangle, XamlPropertyIndex.FrameworkElement_Height, 100); IXamlDirectObject rectBrush = XamlDirect.CreateInstance(XamlTypeIndex.SolidColorBrush); XamlDirect.SetColorProperty(rectBrush, XamlPropertyIndex.SolidColorBrush_Color, Colors.Red); XamlDirect.SetXamlDirectObjectProperty(rectangle, XamlPropertyIndex.Shape_Fill, rectangleBrush); XamlDirect.SetXamlDirectObjectProperty(border, XamlPropertyIndex.Border_Child, rectangle); RootGrid.Children.Add((UIElement) XamlDirect.GetObject(border));
È facile intuire, vista la complessità del codice, che le nuove API non sono pensate per realizzare la normale UI delle nostre applicazioni, ma, piuttosto, per la realizzazione e riscrittura di particolari funzionalità, dove ottenere il massimo delle performance dalla scheda grafica è essenziale.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire attività basate su eventi con Azure Container Jobs
Come migrare da una form non tipizzata a una form tipizzata in Angular
Implementare l'infinite scroll con QuickGrid in Blazor Server
Configurare policy CORS in Azure Container Apps
Sfruttare al massimo i topic space di Event Grid MQTT
Usare una container image come runner di GitHub Actions
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Utilizzare politiche di resiliency con Azure Container App
Generare file PDF da Blazor WebAssembly con iText
Gestire i null nelle reactive form tipizzate di Angular
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Short-circuiting della Pipeline in ASP.NET Core
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Utilizzare QuickGrid di Blazor con Entity Framework
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- ASP 3 per esempi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2
- Steel Style CheckBox per Silverlight 4.0