Windows 10 FCU Conditional XAML

Nun ist es da, das Windows 10 Fall Creators Update (FCU) oder auch Build 16299 genannt. Mit der nun 5ten Version der Windows API (WinRT) kommen einige kleinere Neuerungen. Eine ist der Glass Effekt aus Vista ist zurück, hier nun Acrylic genannt. Kurz gesagt, es scheint der Hintergrund bei der aktiven App durch, aber nur wenn die App so entwickelt ist. Auch im Stromsparmodus wird der Effekt deaktiviert. Dazu wurde ein neuer Brush Typ definiert, der für den Modus aktiv und passives Window die Farbe definiert.

   1:    <AcrylicBrush 
   2:                      FallbackColor="Yellow" 
   3:                      TintColor="LightBlue"
   4:                      TintOpacity="0.3">
   5:   </AcrylicBrush>

 

Das führt uns nun zum zweiten Feature, conditional XAML. Normalerweise wird ein Hintergrund wie folgt als Brush deklariert

   1:    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

 

Das ist sozusagen “klassik” UWP Style. Will man Acrylic Style,  benötigt man einen passenden AcrylicBrush und eine TintOpacity kleiner als 1. Per Xaml könnten man das machen

   1:  <Grid Background="{ThemeResource SystemControlAcrylicWindowBrush}">

Um auf die verschiedenen Api Level von Windows 10 zugreifen zu können, kann die Hilfsfunktion IsApiTypePresent genutzt werden. Per Zeichenkette als Parameter lassen sich verschiedene Funktionen abprüfen und so die Logik anpassen, abhängig von verwendeter Hardware und Windows Version. Was mir mir ganz neu war ist, das man das man das im XAML auch nutzen kann. Die Funktion nennt sich conditional XAML und ist bereits seit Creators Update, also ca. 6 Monate, fester Bestandteil des Redmonder Betriebssystems. Zunächst werden zwei Namespace angelegt und per Type Abfrage umgeschalten. Dies ist nötig um in jedem Fall bzw. jedem Windows Build eine korrekt definierte UI zu haben. Würde man nun das Text Property per Namespace und ohne (default) verwenden, kommt es zu einer Fehlermeldung “Text property is set more than once”

Mit IsTypePresent lassen sich verschiedenste Fähigkeiten prüfen. Der einfach API Level wird per

IsApiContractPresent(Windows.Foundation.UniversalApiContract, 5) = true abgefragt. Die Nutzung im deklarativen XAML Code muss dem Schema xmlns:myNamespace="schema?conditionalMethod(parameter)" folgen.

Alles zusammengeführt folgender XAML Code um eine App zu bekommen die in Creators Update und Creators Update Fall Edition korrekt läuft

   1:  xmlns:classic="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsTypeNotPresent(Windows.UI.Xaml.Media.AcrylicBrush)"
   2:  xmlns:acrylic="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsTypePresent(Windows.UI.Xaml.Media.AcrylicBrush)"
   3:  ......
   4:  classic:Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
   5:  acrylic:Background="{ThemeResource SystemControlAcrylicWindowBrush}"
Kommentare sind geschlossen