Kolumne: XAML Expertise

XAML-Tipp: UWP – Conditional XAML
Keine Kommentare

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „UWP: Conditional XAML“.

Seit Windows 10 veröffentlicht wurde, hat es bereits fünf große Updates für das Windows-API (WinRT) gegeben. Viele neue Features, Steuerelemente und zahlreiche weitere Neuerungen sind hinzugekommen. Für den Windows-10-Entwickler kann das durchaus zum Problem werden, wenn er für alle eine kompatible Windows-App bereitstellen möchte. Seit dem Creators Update (Version 1703, Build 15063) können Entwickler auf das Conditional-XAML-Feature zurückgreifen; durch zusätzlichen XAML-Code erhöht es die Kompatibilität. Die Verwendung von Conditional XAML setzt voraus, dass Sie in Ihrem Visual-Studio-Projekt mindestens den Build 15063 des Creators Updates oder höher nutzen und eine höhere Version als Zielversion festlegen. Um eine Bedingung in XAML zu verwenden, müssen Sie zuerst einen bedingten XAML-Namespace am Beginn der Seite deklarieren:

xmlns:myNamespace="schema?conditionalMethod(parameter)"

Ein bedingter Namespace besteht aus zwei Teilen, die durch ein Fragezeichen getrennt sind. Der Inhalt vor dem Trennzeichen gibt den Namespace an, in dem das referenzierte API enthalten ist. Der Inhalt nach dem Trennzeichen stellt die bedingte Methode dar, die bestimmt, ob die Auswertung für den bedingten Namespace true oder false ergibt. Tabelle 1 zeigt die unterstützten bedingten Methoden.

Methode Umkehrung
IsApiContractPresent(ContractName, VersionNumber) IsApiContractNotPresent(ContractName, VersionNumber)
IsTypePresent(ControlType) IsTypeNotPresent(ControlType)
IsPropertyPresent(ControlType, PropertyName) IsPropertyNotPresent(ControlType, PropertyName)

Tabelle 1: Bedingte Methoden

Am Beispiel in Listing 1 ist zu erkennen, wie eine Textnachricht auf dem Windows 10 Fall Creators Update angezeigt wird. Bei allen niedrigeren Windows-10-API-Versionen wird ein alternativer Hinweistext angezeigt. In Abbildung 1 ist zu sehen, wie die App unter Windows 10 mit installiertem Fall Creators Update dargestellt wird. Im Vergleich dazu zeigt Abbildung 2 die Darstellung unter einer älteren Windows-10-Version.

Mit Conditional XAML können Sie die API-Prüfungen statt im Markup in Ihrem Code ausführen. Ein kleines Beispiel dafür finden Sie in Listing 2.

<Page
  x:Class="ConditionalXAML.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:fallCreatorsUpdate="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,5)"
  xmlns:noFallCreatorsUpdate="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,5)"
  mc:Ignorable="d">

  <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <TextBlock FontSize="42" 
      Margin="50" 
      fallCreatorsUpdate:Text="Du hast das Windows 10 Fall Creators Update!"
        noFallCreatorsUpdate:Text="Bitte das Windows 10 Fall Creators Update installieren." />
  </Grid>
</Page>
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
{
  textBlock.Text = "Du hast das Windows 10 Fall Creators Update!";
}
Abb. 1: Die App wird unter Windows 10 mit Fall Creators Update ausgeführt

Abb. 1: Die App wird unter Windows 10 mit Fall Creators Update ausgeführt

Abb. 2: Die App wird nicht unter Windows 10 mit Fall Creators Update ausgeführt

Abb. 2: Die App wird nicht unter Windows 10 mit Fall Creators Update ausgeführt

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -