Typy a vlastnosti v .NET MAUI XAML

Dokončeno

XAML je deklarativní jazyk využívající značky. Je navržená s cílem zjednodušit proces vytváření uživatelského rozhraní. Prvky v XAML přímo představují instanci objektů, ke kterým přistupujete v souborech kódu.

V této lekci se dozvíte, jak používat typy dostupné v JAZYCE XAML a jak nastavit a číst vlastnosti těchto typů.

Kde jsou definované typy?

.NET MAUI implementuje analyzátor XAML, který parsuje deklarované elementy XAML a vytvoří instanci každého prvku jako typ .NET. Dialekt XAML, kterému analyzátor .NET MAUI rozumí, je specifický pro .NET MAUI, i když se podobá jiným architekturám XAML, jako je Například Windows Presentation Foundation.

Typy .NET, které implementují kód XAML položek, jsou implementovány kódem v několika sestaveních .NET. Mnoho z těchto sestavení je součástí šablon .NET MAUI. Další vlastní typy můžete využít také načtením odpovídajících sestavení v rámci projektu. Mnoho sestavení je k dispozici jako balíčky NuGet. Většina běžných typů, které aplikace MAUI používá, jsou v balíčcích Microsoft.Maui.Dependencies a Microsoft.Maui.Extensions .

Každý typ je definován v oboru názvů. V kódu XAML zadáte obory názvů pro typy, na které odkazujete. Většina ovládacích prvků MAUI se nachází v oboru názvů Microsoft.Maui.Controls, zatímco obor názvů Microsoft.Maui definuje typy nástrojů, jako je , a Thickness zahrnuje generalizované typy, jako Colorje . Možnost zavést typy tímto způsobem zvýrazní rozšiřitelnost XAML. XAML umožňuje vytvořit uživatelské rozhraní aplikace s svobodou zahrnout prvky XAML .NET MAUI, typy .NET a vlastní typy. Ve většině případů se nemusíte starat o tyto obory názvů, protože se přenesou pomocí implicitní usings funkce jazyka C#, která je automaticky přidá do celé aplikace.

Vytvoření instance typů v XAML

Prvním krokem při použití XAML k sestavení uživatelského rozhraní je vytvoření instance typů ovládacích prvků uživatelského rozhraní. V jazyce XAML můžete vytvořit objekt zadaného typu pomocí syntaxe elementu objektu. Syntaxe elementu object je standardní, dobře formátovaná syntaxe XML pro deklaraci elementu. Pokud například chcete vytvořit popisek s konkrétní barvou, bude prvek XAML vypadat jako následující kód:

<Label TextColor="AntiqueWhite"/>

Analyzátor XAML .NET MAUI parsuje tento element XAML k vytvoření instance objektu v paměti. Analyzovaný popisek XAML je v podstatě stejný jako následující kód jazyka C#:

var myLabel = new Label
{
  TextColor = Color.FromRgb(255, 255, 100)
};

Co je obor názvů XAML?

Nezapomeňte, že aby analyzátor XAML úspěšně parsovala definici XAML ovládacího prvku na stránce, musí mít přístup k kódu, který implementuje ovládací prvek, a definuje jeho vlastnosti. Ovládací prvky dostupné pro stránku .NET MAUI jsou implementovány v kolekci sestavení, která jsou nainstalována jako součást balíčku Microsoft.Maui NuGet. Ovládací prvky jsou umístěny v oboru názvů .NET v těchto sestaveních. V kódu jazyka C# přenesete obor názvů do oboru s direktivou using . Na stránce XAML odkazujete na obor názvů s atributem xmlns stránky. Následující kód ukazuje obory názvů, které stránka XAML vytvořená v předchozí lekci používá:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             ...>

    ...
</ContentPage>

První obor názvů je http://schemas.microsoft.com/dotnet/2021/mauivýchozí obor názvů stránky. Tato forma URI oboru názvů je typická pro XML a vypadá trochu jinak než ty, se kterými byste mohli být obeznámeni v jazyce C#. Tento identifikátor URI je ale jednoduše alias pro jeden nebo více oborů názvů definovaných sestaveními v balíčku Microsoft.Maui NuGet, takže zadáním tohoto oboru názvů na začátku stránky se do oboru přidají všechny typy a ovládací prvky .NET MAUI. Pokud tento obor názvů vynecháte, nebudete moct používat ovládací prvky, jako Buttonje , Label, Entrynebo StackLayout.

Druhý obor názvů , odkazuje na sestavení, která obsahují různé vnitřní typy .NET, http://schemas.microsoft.com/winfx/2009/xamljako jsou řetězce, číselné a vlastnosti. V předchozím kódu XAML je tento obor názvů přiřazen alias x. V kódu XAML pro tuto stránku odkazujete na typy v tomto oboru názvů jejich předponou x :. Každá stránka XAML se například zkompiluje do třídy a zadáte název třídy, která se vygeneruje pomocí atributu x:Class stránky:

<ContentPage ...
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiXaml.Page1"
            ...>

    ...
</ContentPage>

Typy můžete odkazovat ve vlastních sestaveních v kódu XAML prostřednictvím oboru názvů XAML. Pokud máte například typy a metody, které chcete použít v kódu XAML definovaném v oboru názvů s názvem Utils v projektu, můžete přidat obor názvů Utils na stránku, jak je znázorněno v následujícím kódu. V tomto příkladu budete přistupovat k typům v tomto oboru názvů tak, že je předponou aliasu mycode.

<ContentPage ...
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:mycode="clr-namespace:Utils"
            ...>

    ...
</ContentPage>

Poznámka:

Další příklady této techniky uvidíte později v tomto modulu.

Jak zadat hodnoty vlastností v XAML

V jazyce XML použijete atributy k popisu nebo zadání informací o elementu. V jazyce XAML použijete atributy k nastavení vlastností základního typu. Zvažte například následující kód jazyka C#:

var label = new Label { Text = "Username", TextColor = Color.Black };

Tento příkaz vytvoří nový Label objekt a nastaví Text a TextColor vlastnosti. Chcete-li nastavit vlastnosti v XAML, použijte atributy. Odpovídající kód XAML vypadá takto:

<Label Text="Username" TextColor="Black" />

Jedna věc, kterou si můžete všimnout, že se v kódu XAML liší od kódu jazyka C#, jsou hodnoty vlastností. Například v kódu jazyka C# použijete Color typ vlastnosti TextColor . V definici XAML však nastavíte TextColor řetězcovou hodnotu. Důvodem je to, že řetězec je jediný platný prvek, který můžete použít pro hodnotu atributu XML. Proto musí existovat způsob, jak převést každou řetězcovou hodnotu na správný typ. V jazyce XAML můžete tento převod provést pomocí převaděče typů.

Co je převaděč typů?

Převaděč typů převede atribut XML zadaný jako řetězcovou hodnotu na správný typ. Pokud chcete lépe porozumět tomuto konceptu, zvažte následující příklad:

<Label Text="Username" TextColor="Black" FontSize="42" FontAttributes="Bold,Italic" />

Tento kód vytvoří Label a nastaví jeho Text, TextColor, FontSizea FontAttributes vlastnosti.

Začněte první vlastností , Text. Text je již řetězec, což znamená, že stránka XAML nepotřebuje převaděč typů. TextColor Dále použije tento Color typ, takže XAML vyžaduje převaděč typů k překladu řetězce do odpovídající Color hodnoty. Vlastnost FontSize je celé číslo, takže XAML vyžaduje převaděč typů parsovat řetězec na celé číslo. FontAttributes Nakonec je příkladem komplexního objektu. Hodnoty můžete zkombinovat jako řetězec oddělený čárkami: "Bold,Kurzíva". Řetězec oddělený čárkami je považován za výčet založený na [Flags]a příslušný převaděč typů použije bitovou OR ručičku hodnoty na vlastnost.

.NET MAUI má převaděče typů pro většinu předdefinovaných tříd a používá tyto převaděče typů automaticky. Pokud ale konkrétní převaděč neexistuje, můžete napsat vlastní a přidružit ho k vašemu typu, aby ho bylo možné použít v XAML.

Přiřazení komplexního typu

Převaděče typů jsou skvělé pro jednoduchá nastavení vlastností; V některých případech však musíte vytvořit úplný objekt s vlastními hodnotami vlastností. Řešením tohoto problému je změna přiřazení vlastnosti tak, aby používala syntaxi založenou na elementech. Tato syntaxe se nazývá formulář elementu vlastnosti. Tato syntaxe zahrnuje rozdělení vlastnosti setter do formuláře parent-child, kde vlastnost je vyjádřena ve značce elementu form Type.PropertyName. Předpokládejme, že chcete přiřadit rozpoznávání gest k popisku, aby uživatel aplikace mohl na popisek klepnout. Rozpoznávání gest je složitý objekt s vlastními vlastnostmi. Obvykle je potřeba přiřadit tyto vlastnosti, aby se zajistily správné funkce:

<TapGestureRecognizer NumberOfTapsRequired="2" />

Pokud potřebujete přiřadit tuto hodnotu Label, můžete zapsat XAML takto:

<Label Text="Username" TextColor="Black" FontSize="42" FontAttributes="Bold,Italic">
    <Label.GestureRecognizers>
        <TapGestureRecognizer NumberOfTapsRequired="2" />
    </Label.GestureRecognizers>
</Label>

Typ Label má vlastnost s názvem GestureRecognizers. Pomocí formuláře Element vlastnosti můžete přidat TapGestureRecognizer do seznamu gest pro Labelobjekt .

Výchozí vlastnost obsahu

Některé ovládací prvky .NET MAUI mají výchozí vlastnost obsahu. Vlastnost obsahu umožňuje zadat hodnotu vlastnosti na ovládacím prvku bez explicitního uvedení v XAML. Podívejte se na následující fragment XAML:

<VerticalStackLayout>
    <VerticalStackLayout.Children>
        <Label Text="Please log in" />
    </VerticalStackLayout.Children>
</VerticalStackLayout>

Tento kód vytvoří VerticalStackLayout a přidá Label jako podřízený prvek. Vzhledem k tomu, že je běžné přidávat podřízené položky do objektu VerticalStackLayout, je jeho Children vlastnost výchozí vlastností obsahu. To znamená, že můžete přidat dítě, aniž byste explicitně zadali Childrennásledující:

<VerticalStackLayout>
    <Label Text="Please log in" />
</VerticalStackLayout>

Kontrola znalostí

1.

Co dělá převaděč typů?

2.

Jak do oboru v souboru XAML přineste vlastní typy?