Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Rozšíření značek XAML pro více platforem .NET (.NET MAUI) pomáhají vylepšit výkon a flexibilitu XAML tím, že umožňují nastavit atributy elementů z různých zdrojů.
Například obvykle nastavíte vlastnost Color
BoxView takto:
<BoxView Color="Blue" />
Můžete ale raději nastavit atribut Color
z hodnoty uložené ve slovníku prostředků nebo z hodnoty statické vlastnosti třídy, kterou jste vytvořili, nebo z vlastnosti typu Color jiného prvku na stránce nebo vytvořeného ze samostatných hodnot odstínů, sytosti a světelnosti. Všechny tyto možnosti jsou možné pomocí rozšíření značek XAML.
Rozšíření zápisu je jiný způsob, jak vyjádřit atribut prvku. Značkovací rozšíření XAML pro .NET MAUI lze obvykle rozeznat podle hodnoty atributu uzavřené ve složených závorkách:
<BoxView Color="{StaticResource themeColor}" />
Jakákoli hodnota atributu ve složených závorkách je vždy značkovací rozšíření XAML. Na rozšíření značek XAML se ale dá odkazovat i bez použití složených závorek.
Poznámka
Několik rozšíření značek XAML je součástí specifikace XAML 2009. Ty se zobrazují v souborech XAML s obvyklou předponou oboru názvů x
a běžně se na ně odkazuje s touto předponou.
Kromě rozšíření značek probíraných v tomto článku jsou následující rozšíření značek zahrnuta v .NET MAUI a popsána v dalších článcích:
-
AppThemeBinding
– určuje zdroj, který bude využíván na základě aktuálního systémového motivu. Další informace naleznete v tématu rozšíření značek AppThemeBinding. -
Binding
– vytvoří propojení mezi vlastnostmi dvou objektů. Další informace naleznete v tématu datové vazby. -
DynamicResource
– reaguje na změny objektů ve slovníku zdrojů. Další informace naleznete v tématu Dynamické styly. -
FontImage
- zobrazí ikonu písma v libovolném zobrazení, které může zobrazit ImageSource. Další informace najdete v sekci Načtení ikony písma. -
OnIdiom
– přizpůsobí vzhled uživatelského rozhraní na základě iddiomu zařízení, na kterém aplikace běží. Další informace naleznete v tématu Přizpůsobení vzhledu uživatelského rozhraní na základě idiomu zařízení. -
OnPlatform
– přizpůsobí vzhled uživatelského rozhraní na základě jednotlivých platforem. Další informace naleznete v tématu Přizpůsobení vzhledu uživatelského rozhraní na základě platformy. -
RelativeSource
– nastaví zdroj vazby vzhledem k pozici cíle vazby. Další informace naleznete v tématu Relativní vazby. -
StaticResource
– odkazuje na objekty z slovníku zdrojů. Další informace najdete v tématu Slovníky zdrojů. -
TemplateBinding
– provádí datovou vazbu ze šablony ovládacího prvku. Další informace naleznete v tématu Řídicí šablony.
x:Static markup extension
Rozšíření x:Static
značek podporuje třída StaticExtension. Třída má jednu vlastnost s názvem Member
typu string
, kterou jste nastavili na název veřejné konstanty, statické vlastnosti, statického pole nebo člen výčtu.
Jedním ze způsobů, jak použít x:Static
, je nejprve definovat třídu s některými konstantami nebo statickými proměnnými, například s touto AppConstants
třídou:
static class AppConstants
{
public static double NormalFontSize = 18;
}
Následující XAML ukazuje nejrozsáhlejší způsob vytvoření instance třídy StaticExtension mezi značkami elementu vlastnosti Label.FontSize
:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:sys="clr-namespace:System;assembly=netstandard"
xmlns:local="clr-namespace:MarkupExtensions"
x:Class="MarkupExtensions.StaticDemoPage"
Title="x:Static Demo">
<StackLayout Margin="10, 0">
<Label Text="Label No. 1">
<Label.FontSize>
<x:StaticExtension Member="local:AppConstants.NormalFontSize" />
</Label.FontSize>
</Label>
···
</StackLayout>
</ContentPage>
Analyzátor XAML také umožňuje, aby třída StaticExtension byla zkrácena jako x:Static
:
<Label Text="Label No. 2">
<Label.FontSize>
<x:Static Member="local:AppConstants.NormalFontSize" />
</Label.FontSize>
</Label>
Tuto syntaxi lze dále zjednodušit umístěním třídy StaticExtension a členového nastavení do složených závorek. Výsledný výraz se nastaví přímo na atribut FontSize
:
<Label Text="Label No. 3"
FontSize="{x:StaticExtension Member=local:AppConstants.NormalFontSize}" />
V tomto příkladu žádné uvozovky uvnitř složených závorek. Vlastnost Member
StaticExtension již není atributem XML. Je to naopak součást výrazu pro rozšíření značky.
Stejně jako můžete zkrátit x:StaticExtension
na x:Static
, když jej použijete jako prvek objektu, můžete ho také zkrátit ve výrazu ve složených závorkách:
<Label Text="Label No. 4"
FontSize="{x:Static Member=local:AppConstants.NormalFontSize}" />
Třída StaticExtension má atribut ContentProperty
odkazující na vlastnost Member
, která označuje tuto vlastnost jako výchozí vlastnost obsahu třídy. U značkovacích rozšíření XAML vyjádřených složenými závorkami můžete odstranit část Member=
z výrazu.
<Label Text="Label No. 5"
FontSize="{x:Static local:AppConstants.NormalFontSize}" />
Toto je nejběžnější forma rozšíření x:Static
značek.
Kořenová značka příkladu XAML obsahuje také deklaraci oboru názvů XML pro obor názvů .NET System
. To umožňuje nastavit velikost písma Label na statické pole Math.PI
. Výsledkem je poměrně malý text, takže vlastnost Scale
je nastavená na Math.E
:
<Label Text="π × E sized text"
FontSize="{x:Static sys:Math.PI}"
Scale="{x:Static sys:Math.E}"
HorizontalOptions="Center" />
Následující snímek obrazovky ukazuje výstup XAML:
x:Reference – rozšíření značek
Rozšíření značek x:Reference
podporuje třída ReferenceExtension. Třída má jednu vlastnost s názvem Name
typu string
, kterou jste nastavili na název prvku na stránce, který má název s x:Name
. Tato vlastnost Name
je vlastnost obsahu ReferenceExtension, takže Name=
není vyžadován, pokud se x:Reference
objeví ve složených závorkách. Rozšíření x:Reference
se používá výhradně s datovými vazbami. Další informace o datových vazbách naleznete v tématu Datové vazby.
Následující příklad XAML ukazuje dvě použití x:Reference
s datovými vazbami, první, kde se používá k nastavení Source
vlastnosti objektu Binding
a druhé, kde se používá k nastavení vlastnosti BindingContext
pro dvě datové vazby:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MarkupExtensions.ReferenceDemoPage"
x:Name="page"
Title="x:Reference Demo">
<StackLayout Margin="10, 0">
<Label x:DataType="ContentPage"
Text="{Binding Source={x:Reference page},
StringFormat='The type of this page is {0}'}"
FontSize="18"
VerticalOptions="Center"
HorizontalTextAlignment="Center" />
<Slider x:Name="slider"
Maximum="360"
VerticalOptions="Center" />
<Label x:DataType="Slider"
BindingContext="{x:Reference slider}"
Text="{Binding Value, StringFormat='{0:F0}° rotation'}"
Rotation="{Binding Value}"
FontSize="24"
HorizontalOptions="Center"
VerticalOptions="Center" />
</StackLayout>
</ContentPage>
V tomto příkladu oba výrazy x:Reference
používají zkrácenou verzi názvu třídy ReferenceExtension a eliminují Name=
část výrazu. V prvním příkladu je rozšíření značek x:Reference
vloženo do rozšíření značek Binding
a vlastnosti Source
a StringFormat
jsou odděleny čárkami.
Následující snímek obrazovky ukazuje výstup XAML:
x:Type – rozšíření značek
Rozšíření značek x:Type
je v XAML ekvivalentem klíčového slova typeof
jazyka C#. Podporuje ji třída TypeExtension, která definuje vlastnost s názvem TypeName
typu string
, která by měla být nastavena na název třídy nebo struktury. Rozšíření x:Type
značek vrátí objekt Type
dané třídy nebo struktury.
TypeName
je vlastnost obsahu TypeExtension, takže TypeName=
není vyžadována, pokud se x:Type
zobrazí se složenými závorkami.
Rozšíření značek x:Type
se běžně používá s rozšířením značek x:Array
. Další informace najdete v tématu rozšíření značek x:Array.
Následující příklad XAML ukazuje použití x:Type
značkovacího rozšíření k instanciaci objektů .NET MAUI a jejich přidání do StackLayout. XAML se skládá ze tří Button prvků s jejich Command
vlastnostmi nastavenými na Binding
a s CommandParameter
vlastnostmi nastavenými na typy tří zobrazení .NET MAUI:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MarkupExtensions"
x:Class="MarkupExtensions.TypeDemoPage"
Title="x:Type Demo"
x:DataType="local:TypeDemoPage">
<StackLayout x:Name="stackLayout"
Padding="10, 0">
<Button Text="Create a Slider"
HorizontalOptions="Center"
VerticalOptions="Center"
Command="{Binding CreateCommand}"
CommandParameter="{x:Type Slider}" />
<Button Text="Create a Stepper"
HorizontalOptions="Center"
VerticalOptions="Center"
Command="{Binding CreateCommand}"
CommandParameter="{x:Type Stepper}" />
<Button Text="Create a Switch"
HorizontalOptions="Center"
VerticalOptions="Center"
Command="{Binding CreateCommand}"
CommandParameter="{x:Type Switch}" />
</StackLayout>
</ContentPage>
Soubor code-behind definuje a inicializuje vlastnost CreateCommand
.
public partial class TypeDemoPage : ContentPage
{
public ICommand CreateCommand { get; private set; }
public TypeDemoPage()
{
InitializeComponent();
CreateCommand = new Command<Type>((Type viewType) =>
{
View view = (View)Activator.CreateInstance(viewType);
view.VerticalOptions = LayoutOptions.Center;
stackLayout.Add(view);
});
BindingContext = this;
}
}
Když se stiskne Button, je vytvořena nová instance argumentu CommandParameter
a přidána do StackLayout. Tři Button objekty pak sdílí stránku s dynamicky vytvořenými zobrazeními:
Obecné typy lze zadat pomocí rozšíření značkování x:Type
tak, že obecné omezení zadáte jako řetězcový argument s předponou v závorkách.
<x:Array Type="{x:Type local:MyType(local:MyObject)}">
...
</x:Array>
Lze zadat více argumentů typu jako řetězce s předponami, oddělené čárkou:
<x:Array Type="{x:Type local:MyType(local:MyObject,x:Boolean)}">
...
</x:Array>
Další informace o obecných formátech v jazyce XAML naleznete v tématu obecné typy.
x:Array – rozšíření značkování
Rozšíření značkování x:Array
umožňuje definovat pole ve značkování. Podporuje ji třída ArrayExtension, která definuje dvě vlastnosti:
-
Type
typuType
, který označuje typ prvků v poli. Tato vlastnost by měla být nastavena na rozšíření značkovacího jazykax:Type
. -
Items
typuIList
, který představuje kolekci položek samotných. Toto je vlastnost obsahu ArrayExtension.
Rozšíření značek x:Array
se nikdy nezobrazuje ve složených závorkách. Místo toho x:Array
počáteční a koncové značky odděluje seznam položek.
Následující příklad XAML ukazuje, jak pomocí x:Array
přidat položky do ListView nastavením vlastnosti ItemsSource
na pole:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MarkupExtensions.ArrayDemoPage"
Title="x:Array Demo Page">
<ListView Margin="10">
<ListView.ItemsSource>
<x:Array Type="{x:Type Color}">
<Color>Aqua</Color>
<Color>Black</Color>
<Color>Blue</Color>
<Color>Fuchsia</Color>
<Color>Gray</Color>
<Color>Green</Color>
<Color>Lime</Color>
<Color>Maroon</Color>
<Color>Navy</Color>
<Color>Olive</Color>
<Color>Pink</Color>
<Color>Purple</Color>
<Color>Red</Color>
<Color>Silver</Color>
<Color>Teal</Color>
<Color>White</Color>
<Color>Yellow</Color>
</x:Array>
</ListView.ItemsSource>
<ListView.ItemTemplate>
<DataTemplate x:DataType="Color">
<ViewCell>
<BoxView Color="{Binding}"
Margin="3" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
V tomto příkladu ViewCell vytvoří jednoduchou BoxView pro každou položku barvy:
Poznámka
Při definování polí běžných typů, jako jsou řetězce nebo čísla, použijte značky primitiv jazyka XAML uvedené v Předávat argumenty.
x:Null – rozšíření značek
Rozšíření značek x:Null
podporuje třída NullExtension. Nemá žádné vlastnosti a je to jednoduše ekvivalent XAML klíčového slova null
jazyka C#.
Následující příklad XAML ukazuje, jak použít rozšíření značek x:Null
:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MarkupExtensions.NullDemoPage"
Title="x:Null Demo">
<ContentPage.Resources>
<Style TargetType="Label">
<Setter Property="FontSize" Value="48" />
<Setter Property="FontFamily" Value="OpenSansRegular" />
</Style>
</ContentPage.Resources>
<StackLayout Padding="10, 0">
<Label Text="Text 1" />
<Label Text="Text 2" />
<Label Text="Text 3"
FontFamily="{x:Null}" />
<Label Text="Text 4" />
<Label Text="Text 5" />
</StackLayout>
</ContentPage>
V tomto příkladu je implicitní Style definován pro Label a zahrnuje Setter, který nastavuje vlastnost FontFamily
na konkrétní písmo. Třetí Label se však vyhýbá použití písma definovaného v implicitním stylu nastavením jeho FontFamily
na x:Null
.
Rozšíření značek DataTemplate
Rozšíření značky DataTemplate umožňuje převést typ na DataTemplate. Je podporováno třídou DataTemplateExtension, která definuje vlastnost TypeName
typu string
, jež je nastavena na název typu, který se má převést na DataTemplate. Vlastnost TypeName
je vlastnost obsahu DataTemplateExtension. Proto u výrazů značek XAML vyjádřených složenými závorkami můžete eliminovat TypeName=
části výrazu.
Poznámka
Analyzátor XAML umožňuje, aby byla třída DataTemplateExtension zkrácena na DataTemplate.
Typické použití tohoto rozšíření značek je v aplikaci Shell, jak je znázorněno v následujícím příkladu:
<ShellContent Title="Monkeys"
Icon="monkey.png"
ContentTemplate="{DataTemplate views:MonkeysPage}" />
V tomto příkladu se MonkeysPage
převede z ContentPage na DataTemplate, který je nastaven jako hodnota vlastnosti ShellContent.ContentTemplate
. Tím se zajistí, že se MonkeysPage
vytvoří pouze v případě, že dojde k navigaci na stránku, a ne při spuštění aplikace.
Další informace o aplikacích Shell najdete v tématu Shell.