Používání rozšíření značek XAML
Rozšíření značek XAML pomáhají zvýšit výkon a flexibilitu XAML tím, že umožňují nastavit atributy elementů z různých zdrojů. Několik rozšíření značek XAML je součástí specifikace XAML 2009. Ty se zobrazují v souborech XAML s předponou vlastního oboru názvů a běžně se na tyto předpony x odkazují. Tento článek popisuje následující rozšíření značek:
x:Static– odkazují na statické vlastnosti, pole nebo členy výčtu.x:Reference– odkaz na pojmenované elementy na stránce.x:Type– nastaví atribut naSystem.Typeobjekt.x:Array– vytvoří pole objektů určitého typu.x:Null– nastaví atribut nanullhodnotu.OnPlatform– přizpůsobení vzhledu uživatelského rozhraní pro každou platformu.OnIdiom– přizpůsobí vzhled uživatelského rozhraní na základě idiomy zařízení, na které je aplikace spuštěná.DataTemplate– převede typ naDataTemplate.FontImage– zobrazí ikonu písma v libovolném zobrazení, které může zobrazitImageSource.AppThemeBinding– spotřebovává prostředek na základě aktuálního systémového motivu.
Další rozšíření značek XAML byla v minulosti podporována jinými implementacemi XAML a jsou také Xamarin.Forms podporována . Tyto informace jsou podrobně popsány v dalších článcích:
StaticResource– odkazují na objekty ze slovníku prostředků, jak je popsáno v článkuStaticResource.DynamicResource– reagovat na změny objektů ve slovníku prostředků, jak je popsáno v článkuDynamicResourceBinding– navázání propojení mezi vlastnostmi dvou objektů, jak je popsáno v článku DatováBindingTemplateBinding– provádí datovou vazbu ze šablony ovládacího prvku, jak je popsáno v článku Xamarin.Forms control templates .RelativeSource– nastaví zdroj vazby vzhledem k pozici cíle vazby, jak je popsáno v článkuRelativeSource
Rozložení RelativeLayout používá vlastní rozšíření značek ConstraintExpression . Toto rozšíření značek je popsané v článku RelativeLayout.
x:Static – rozšíření značek
Rozšíření x:Static značek je podporováno StaticExtension třídou . Třída má jednu vlastnost s názvem Xamarin_Forms _Xaml_StaticExtension_Member" data-linktype="absolute-path">typu, který nastavíte na název veřejné konstanty, statické vlastnosti, statického pole nebo člena Memberstring výčtu.
Jedním z běžných metod použití je nejprve definovat třídu s některými konstantami nebo statickými proměnnými, jako je například tato malá třída v programu x:StaticAppConstantsx:Static
static class AppConstants
{
public static double NormalFontSize = 18;
}
Stránka ukázky x:Static ukazuje několik způsobů použití rozšíření značek. Nejslovnější přístup vytvoří instanci třídy StaticExtension mezi značkami Label.FontSize property-element:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
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 zkrácení třídy StaticExtension jako x:Static :
<Label Text="Label No. 2">
<Label.FontSize>
<x:Static Member="local:AppConstants.NormalFontSize" />
</Label.FontSize>
</Label>
To se může ještě zjednodušit, ale změna zavádí novou syntaxi: Skládá se z umístění třídy a nastavení členu do StaticExtension složených závorek. Výsledný výraz je nastavený přímo na FontSize atribut :
<Label Text="Label No. 3"
FontSize="{x:StaticExtension Member=local:AppConstants.NormalFontSize}" />
Všimněte si, že ve složených závorkách nejsou žádné uvozovky. Vlastnost Member už není atribut StaticExtension XML. Místo toho je součástí výrazu pro rozšíření značek.
Stejně jako ho můžete zkří it použít jako prvek objektu, můžete ho také zkří it ve výrazu ve složených x:StaticExtensionx:Static závorkách:
<Label Text="Label No. 4"
FontSize="{x:Static Member=local:AppConstants.NormalFontSize}" />
Třída má atribut odkazující na vlastnost , který označuje tuto vlastnost jako výchozí StaticExtensionContentProperty vlastnost obsahu Member třídy. U rozšíření značek XAML vyjádřených složenou závorkou můžete část Member= výrazu eliminovat:
<Label Text="Label No. 5"
FontSize="{x:Static local:AppConstants.NormalFontSize}" />
Toto je nejběžnější forma rozšíření x:Static značek.
Stránka Static Demo (Statická ukázka) obsahuje dva další příklady. Kořenová značka souboru XAML obsahuje deklaraci oboru názvů XML pro obor System názvů .NET:
xmlns:sys="clr-namespace:System;assembly=netstandard"
To umožňuje Label nastavit velikost písma na statické pole Math.PI . Výsledkem je spíše malý text, takže Scale vlastnost je nastavená na Math.E :
<Label Text="π × E sized text"
FontSize="{x:Static sys:Math.PI}"
Scale="{x:Static sys:Math.E}"
HorizontalOptions="Center" />
Poslední příklad zobrazí Device.RuntimePlatform hodnotu . Statická Environment.NewLine vlastnost slouží k vložení znaku nového řádku mezi dva Span objekty:
<Label HorizontalTextAlignment="Center"
FontSize="{x:Static local:AppConstants.NormalFontSize}">
<Label.FormattedText>
<FormattedString>
<Span Text="Runtime Platform: " />
<Span Text="{x:Static sys:Environment.NewLine}" />
<Span Text="{x:Static Device.RuntimePlatform}" />
</FormattedString>
</Label.FormattedText>
</Label>
Tady je ukázka spuštění:
x:Reference – rozšíření značek
Rozšíření x:Reference značek je podporováno ReferenceExtension třídou . Třída má jednu vlastnost s názvem Xamarin_Forms _Xaml_ReferenceExtension_Name" data-linktype="absolute-path">typu, který jste nastavili na název Namestring prvku x:Name na stránce, který má název s . Tato Name vlastnost je vlastnost content objektu , takže se nevyžaduje, když se zobrazí ve ReferenceExtensionName=x:Reference složených závorkách.
Rozšíření x:Reference značek se používá výhradně s datovými vazbami, které jsou podrobněji popsány v článku Datová x:Reference
Stránka ukázky x:Reference ukazuje dvě použití s datovými vazbami, první, kde se používá k nastavení vlastnosti objektu, a druhou, kde se používá k nastavení vlastnosti pro dvě datové SourceBindingBindingContext vazby:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
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 Text="{Binding Source={x:Reference page},
StringFormat='The type of this page is {0}'}"
FontSize="18"
VerticalOptions="CenterAndExpand"
HorizontalTextAlignment="Center" />
<Slider x:Name="slider"
Maximum="360"
VerticalOptions="Center" />
<Label BindingContext="{x:Reference slider}"
Text="{Binding Value, StringFormat='{0:F0}° rotation'}"
Rotation="{Binding Value}"
FontSize="24"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
Oba výrazy používají zkrácenou verzi názvu třídy a eliminují x:ReferenceReferenceExtension část Name= výrazu. V prvním příkladu je x:Reference rozšíření značek vložené do Binding rozšíření značek. Všimněte Source si, že StringFormat nastavení a jsou oddělená čárkami. Tady je spuštěný program:
x:Type – rozšíření značek
Rozšíření x:Type značek je ekvivalentem XAML klíčového slova jazyka typeof C#. Je podporována třídou , která definuje jednu vlastnost s názvem TypeExtension Xamarin_Forms TypeExtension _Xaml_TypeExtension_TypeName" data-linktype="absolute-path">typu, který je nastaven na TypeName název třídy nebo string struktury. Rozšíření x:Type značek vrátí System.Type objekt této třídy nebo struktury. TypeName je vlastnost content objektu , takže se nevyžaduje, pokud se TypeExtension zobrazí se TypeName=x:Type složenou závorkou.
V Xamarin.Forms rámci existuje několik vlastností, které mají argumenty typu Type . Mezi příklady patří Xamarin_Forms _Style_TargetType" data-linktype="absolute-path">vlastnosti a atribut TargetTypeStyleTargetType který se používá k určení argumentů v obecných třídách. Analyzátor XAML však provádí operaci automaticky a v těchto případech se rozšíření typeofx:Type značek nepoužívá.
Jedno místo, kde je vyžadováno, je s x:Typex:Typex:Array rozšířením značek, které je popsáno v x:Array.
Rozšíření značek je také užitečné při vytváření nabídky, kde každá položka nabídky odpovídá x:Type objektu konkrétního typu. Objekt můžete přidružit ke každé položce nabídky a vytvořit instanci objektu, když Type je položka nabídky vybrána.
Tímto způsobem funguje navigační nabídka v programu MainPageMainPage Soubor MainPage.xaml obsahuje objekt s každou odpovídající konkrétní stránce v TextCell programu:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MarkupExtensions"
x:Class="MarkupExtensions.MainPage"
Title="Markup Extensions"
Padding="10">
<TableView Intent="Menu">
<TableRoot>
<TableSection>
<TextCell Text="x:Static Demo"
Detail="Access constants or statics"
Command="{Binding NavigateCommand}"
CommandParameter="{x:Type local:StaticDemoPage}" />
<TextCell Text="x:Reference Demo"
Detail="Reference named elements on the page"
Command="{Binding NavigateCommand}"
CommandParameter="{x:Type local:ReferenceDemoPage}" />
<TextCell Text="x:Type Demo"
Detail="Associate a Button with a Type"
Command="{Binding NavigateCommand}"
CommandParameter="{x:Type local:TypeDemoPage}" />
<TextCell Text="x:Array Demo"
Detail="Use an array to fill a ListView"
Command="{Binding NavigateCommand}"
CommandParameter="{x:Type local:ArrayDemoPage}" />
···
</TableRoot>
</TableView>
</ContentPage>
Tady je úvodní hlavní stránka v rozšířeních značek:
Každá CommandParameter vlastnost je nastavená na rozšíření x:Type značek, které odkazuje na jednu z ostatních stránek. Vlastnost Command je svázaná s vlastností s názvem NavigateCommand . Tato vlastnost je definována v MainPage souboru s kódem na pozadí:
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
NavigateCommand = new Command<Type>(async (Type pageType) =>
{
Page page = (Page)Activator.CreateInstance(pageType);
await Navigation.PushAsync(page);
});
BindingContext = this;
}
public ICommand NavigateCommand { private set; get; }
}
Vlastnost NavigateCommand je Command objekt, který implementuje příkaz pro spuštění s argumentem typu Type – hodnotou CommandParameter . Metoda vytvoří instanci stránky a pak na ní Activator.CreateInstance přejde. Konstruktor končí nastavením stránky na sebe BindingContext sama, což umožňuje Binding funkci Command on. Další podrobnosti o tomto typu kódu najdete v článku o datové vazbě a zejména v článku o příkazech.
Stránka ukázky x:Type používá podobnou techniku k vytvoření instance prvků a jejich přidání do objektu StackLayout . Soubor XAML se zpočátku skládá ze tří prvků s jejich vlastnostmi nastavenými na a vlastnostmi nastavenými na ButtonCommand typy tří BindingCommandParameterXamarin.Forms zobrazení:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MarkupExtensions.TypeDemoPage"
Title="x:Type Demo">
<StackLayout x:Name="stackLayout"
Padding="10, 0">
<Button Text="Create a Slider"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
Command="{Binding CreateCommand}"
CommandParameter="{x:Type Slider}" />
<Button Text="Create a Stepper"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
Command="{Binding CreateCommand}"
CommandParameter="{x:Type Stepper}" />
<Button Text="Create a Switch"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
Command="{Binding CreateCommand}"
CommandParameter="{x:Type Switch}" />
</StackLayout>
</ContentPage>
Soubor kódu definuje a inicializuje CreateCommand vlastnost :
public partial class TypeDemoPage : ContentPage
{
public TypeDemoPage()
{
InitializeComponent();
CreateCommand = new Command<Type>((Type viewType) =>
{
View view = (View)Activator.CreateInstance(viewType);
view.VerticalOptions = LayoutOptions.CenterAndExpand;
stackLayout.Children.Add(view);
});
BindingContext = this;
}
public ICommand CreateCommand { private set; get; }
}
Metoda, která se spustí při stisknutí , vytvoří novou instanci argumentu, nastaví jeho vlastnost a přidá ButtonVerticalOptions ji do StackLayout . Tyto tři Button prvky pak sdílejí stránku s dynamicky vytvořenými zobrazeními:
x:Array – rozšíření značek
Rozšíření x:Array značek umožňuje definovat pole v kódu. Je podporován ArrayExtension třídou , která definuje dvě vlastnosti:
TypetypuType, který označuje typ prvků v poli.ItemstypuIList, což je kolekce samotných položek. Toto je vlastnost obsahu objektuArrayExtension.
Samotné x:Array rozšíření značek se nikdy nezobrazí ve složených závorkách. Místo toho x:Array oddělte seznam položek počátečními a koncovými značkami. Nastavte Type vlastnost na rozšíření x:Type značek.
Stránka x:Array Demo ukazuje, jak pomocí přidat položky do objektu nastavením vlastnosti na ListViewItemsSource pole:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
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>
<ViewCell>
<BoxView Color="{Binding}"
Margin="3" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
ViewCellBoxView Pro každou položku barvy vytvoří jednoduché:
ukázková ukázka
ukázky x:Array pro x:Array
Existuje několik způsobů, jak zadat jednotlivé Color položky v tomto poli. Můžete použít x:Static rozšíření značek:
<x:Static Member="Color.Blue" />
Nebo můžete použít StaticResource k načtení barvy ze slovníku prostředků:
<StaticResource Key="myColor" />
Ke konci tohoto článku uvidíte vlastní rozšíření značek XAML, které také vytvoří novou hodnotu barvy:
<local:HslColor H="0.5" S="1.0" L="0.5" />
Při definování polí běžných typů, jako jsou řetězce nebo čísla, použijte značky uvedené v článku předávání argumentů konstruktoru k vymezení hodnot.
rozšíření značek x:Null
x:NullPřípona značek je podporována NullExtension třídou. Nemá žádné vlastnosti a je jednoduše ekvivalentem XAML null klíčového slova jazyka C#.
x:NullPřípona značek se vyžaduje zřídka a používá se zřídka, ale pokud ji pro ni hledáte potřebujete, budete rádi, že existuje.
Ukázková stránka x:null znázorňuje jeden scénář , který může být vhodný. Předpokládejme, že definujete implicitní parametr Style pro Label , který obsahuje Setter vlastnost, která nastaví FontFamily vlastnost na název rodiny závislý na platformě:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MarkupExtensions.NullDemoPage"
Title="x:Null Demo">
<ContentPage.Resources>
<ResourceDictionary>
<Style TargetType="Label">
<Setter Property="FontSize" Value="48" />
<Setter Property="FontFamily">
<Setter.Value>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="Times New Roman" />
<On Platform="Android" Value="serif" />
<On Platform="UWP" Value="Times New Roman" />
</OnPlatform>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<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.Content>
</ContentPage>
Potom zjistíte, že pro jeden z Label prvků budete chtít všechna nastavení vlastností v implicitní Style s výjimkou FontFamily , kterou chcete nastavit jako výchozí hodnotu. Pro tento účel můžete definovat jiný, Style ale jednodušší přístup je jednoduše nastavit FontFamily vlastnost konkrétního Label na x:Null , jak je znázorněno ve středu Label .
Program je spuštěný:
ukázková ukázka
ukázky x:null pro x:null
Všimněte si, že čtyři Label prvky mají písmo typu Serif, ale střed Label má výchozí písmo sítě San-Serif.
Rozšíření značek na platformě
Rozšíření značek OnPlatform umožňuje přizpůsobit vzhled uživatelského rozhraní podle platformy. Poskytuje stejné funkce jako OnPlatformOn třídy a, ale s výstižnější reprezentací.
OnPlatformPřípona značek je podporována OnPlatformExtension třídou, která definuje následující vlastnosti:
Defaulttypuobject, který nastavíte na výchozí hodnotu, která bude použita pro vlastnosti, které reprezentují platformy.Androidtypuobject, který nastavíte na hodnotu, která má být použita v Androidu.GTKtypuobject, který nastavíte na hodnotu, která má být použita na platformách GTK.iOStypuobject, který nastavíte na hodnotu, která má být použita v iOS.macOStypuobject, který nastavíte na hodnotu, která má být použita v MacOS.Tizentypuobject, který jste nastavili na hodnotu, která se má použít na platformě Tizen.UWPtypuobject, který nastavíte na hodnotu, která má být použita na Univerzální platforma Windows.WPFtypuobject, který jste nastavili na hodnotu, která se má použít na platformě Windows Presentation Foundation.ConvertertypuIValueConverter, který lze nastavit naIValueConverterimplementaci.ConverterParametertypuobject, který lze nastavit na hodnotu, která má být předánaIValueConverterimplementaci.
Poznámka
Analyzátor XAML umožňuje, OnPlatformExtension aby byla třída zkrácena jako OnPlatform .
DefaultVlastnost je vlastnost content třídy OnPlatformExtension . Proto pro výrazy kódu XAML vyjádřené složenými závorkami můžete eliminovat Default= část výrazu, pokud je to první argument. Pokud Default vlastnost není nastavena, bude použita výchozí Default hodnota Xamarin_Forms _BindableProperty_DefaultValue data-LINKTYPE = "absolutní cesta" >BindableProperty.DefaultValue hodnotu vlastnosti za předpokladu, že rozšíření značek cílí na BindableProperty .
Důležité
Analyzátor XAML očekává, že hodnoty správného typu budou poskytnuty vlastností, které využívají OnPlatform rozšíření značek. Je-li převod typu nezbytný, OnPlatform bude rozšíření značek proveden pokus o jeho provedení pomocí výchozích převaděčů poskytovaných nástrojem Xamarin.Forms . Existují však některé převody typu, které nemohou být provedeny výchozími převaděči a v těchto případech Converter by vlastnost měla být nastavena na IValueConverter implementaci.
Ukázková stránka pro platformu ukazuje, jak používat rozšíření značek:
<BoxView Color="{OnPlatform Yellow, iOS=Red, Android=Green, UWP=Blue}"
WidthRequest="{OnPlatform 250, iOS=200, Android=300, UWP=400}"
HeightRequest="{OnPlatform 250, iOS=200, Android=300, UWP=400}"
HorizontalOptions="Center" />
V tomto příkladu všechny tři OnPlatform výrazy používají zkrácenou verzi OnPlatformExtension názvu třídy. Tři OnPlatform rozšíření značek nastaví Xamarin_Forms OnPlatform _BoxView_Color "data-LINKTYPE =" absolutní cesta ">Color , Xamarin_Forms _VisualElement_WidthRequest data-LINKTYPE =" absolutní cesta ">WidthRequest a Xamarin_Forms _VisualElement_HeightRequest Color " data-LINKTYPE = "absolutní cesta" >HeightRequest vlastnosti na BoxView jiné hodnoty v systémech iOS, Android a UWP. Rozšíření značek také poskytují výchozí hodnoty pro tyto vlastnosti na platformách, které nejsou určeny, a zároveň neodstraní Default= část výrazu. Všimněte si, že vlastnosti rozšíření značek, které jsou nastaveny, jsou odděleny čárkami.
Program je spuštěný:
Ukázková ukázka
pro ukázkovou platformu na platformě
Rozšíření značek OnIdiom
OnIdiomRozšíření značek vám umožní přizpůsobit vzhled uživatelského rozhraní na základě idiom zařízení, ve kterém je aplikace spuštěná. Je podporována OnIdiomExtension třídou, která definuje následující vlastnosti:
Defaulttypobject, který nastavíte na výchozí hodnotu, která bude použita pro vlastnosti, které reprezentují idiomy zařízení.Phonetypuobject, který nastavíte na hodnotu, která se má použít na telefonech.Tablettypuobject, který nastavíte na hodnotu, která se má použít pro tablety.Desktoptypobject, který nastavíte na hodnotu, která se má použít na platformách počítače.TVtypobject, který nastavíte na hodnotu, která se má použít na televizních platformách.Watchtypuobject, který nastavíte na hodnotu, která se má použít na sledovacích platformách.ConvertertypuIValueConverter, který lze nastavit naIValueConverterimplementaci.ConverterParametertypuobject, který lze nastavit na hodnotu, která má být předánaIValueConverterimplementaci.
Poznámka
Analyzátor XAML umožňuje, OnIdiomExtension aby byla třída zkrácena jako OnIdiom .
DefaultVlastnost je vlastnost content třídy OnIdiomExtension . Proto pro výrazy kódu XAML vyjádřené složenými závorkami můžete eliminovat Default= část výrazu, pokud je to první argument.
Důležité
Analyzátor XAML očekává, že hodnoty správného typu budou poskytnuty vlastností, které využívají OnIdiom rozšíření značek. Je-li převod typu nezbytný, OnIdiom bude rozšíření značek proveden pokus o jeho provedení pomocí výchozích převaděčů poskytovaných nástrojem Xamarin.Forms . Existují však některé převody typu, které nemohou být provedeny výchozími převaděči a v těchto případech Converter by vlastnost měla být nastavena na IValueConverter implementaci.
Ukázková stránka OnIdiom ukazuje, jak používat rozšíření značek:
<BoxView Color="{OnIdiom Yellow, Phone=Red, Tablet=Green, Desktop=Blue}"
WidthRequest="{OnIdiom 100, Phone=200, Tablet=300, Desktop=400}"
HeightRequest="{OnIdiom 100, Phone=200, Tablet=300, Desktop=400}"
HorizontalOptions="Center" />
V tomto příkladu všechny tři OnIdiom výrazy používají zkrácenou verzi OnIdiomExtension názvu třídy. Tři OnIdiom rozšíření pro označení nastaví Xamarin_Forms OnIdiom _BoxView_Color "data-LINKTYPE =" absolutní cesta ">Color , Xamarin_Forms _VisualElement_WidthRequest data-LINKTYPE =" absolutní cesta ">WidthRequest a Xamarin_Forms Color _VisualElement_HeightRequest" data-LINKTYPE = "absolutní cesta" >HeightRequest vlastnosti BoxView do různých hodnot na telefonu, tabletu a idiomy počítače. Rozšíření značek také poskytují výchozí hodnoty pro tyto vlastnosti v idiomy, které nejsou určeny, a zároveň neodstraní Default= část výrazu. Všimněte si, že vlastnosti rozšíření značek, které jsou nastaveny, jsou odděleny čárkami.
Program je spuštěný:
Ukázková ukázka
ukázky OnIdiom pro OnIdiom
Rozšíření značek DataTemplate
DataTemplateRozšíření značek umožňuje převést typ na DataTemplate . Je podporována DataTemplateExtension třídou, která definuje TypeName vlastnost typu string , která je nastavena na název typu, který má být převeden na DataTemplate . TypeNameVlastnost je vlastnost content třídy DataTemplateExtension . Proto pro výrazy kódu XAML vyjádřené složenými závorkami můžete eliminovat TypeName= část výrazu.
Poznámka
Analyzátor XAML umožňuje, DataTemplateExtension aby byla třída zkrácena jako DataTemplate .
Typické použití tohoto rozšíření označení je v aplikaci prostředí, 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 MonkeysPage je převod z typu ContentPage na a DataTemplate , který je nastaven jako hodnota ShellContent.ContentTemplate Vlastnosti. Tím se zajistí, že MonkeysPage se vytvoří jenom v případě, že dojde k navigaci na stránce, ne při spuštění aplikace.
Další informace o aplikacích prostředí naleznete v tématu Xamarin.Forms Shell .
Rozšíření značek FontImage
FontImageRozšíření značek umožňuje zobrazit ikonu písma v jakémkoli zobrazení, které může zobrazit ImageSource . Poskytuje stejné funkce jako FontImageSource třída, ale s výstižnější reprezentací.
FontImagePřípona značek je podporována FontImageExtension třídou, která definuje následující vlastnosti:
FontFamilytypstring, rodina písem, do které patří ikona písma.Glyphtypstring, hodnota znaku Unicode ikony písma.ColortypuColor, barva, která má být použita při zobrazení ikony písma.Sizetypdouble, velikost v jednotkách nezávislých na zařízení, která má ikonu vykresleného písma. Výchozí hodnota je 30. Kromě toho lze tuto vlastnost nastavit na pojmenovanou velikost písma.
Poznámka
Analyzátor XAML umožňuje, FontImageExtension aby byla třída zkrácena jako FontImage .
GlyphVlastnost je vlastnost content třídy FontImageExtension . Proto pro výrazy kódu XAML vyjádřené složenými závorkami můžete eliminovat Glyph= část výrazu, pokud je to první argument.
Ukázková stránka FontImage ukazuje, jak používat rozšíření značek:
<Image BackgroundColor="#D1D1D1"
Source="{FontImage , FontFamily={OnPlatform iOS=Ionicons, Android=ionicons.ttf#}, Size=44}" />
V tomto příkladu se zkrácená verze názvu třídy používá k zobrazení ikony XBox z rodiny písem FontImageExtension Ionicons v Image objektu . Výraz také používá rozšíření OnPlatform značek k určení různých hodnot vlastností v iOSu a FontFamily Androidu. Kromě toho je část výrazu eliminována a vlastnosti rozšíření značek, které jsou nastaveny, jsou Glyph= odděleny čárkami. Všimněte si, že zatímco znak Unicode pro ikonu je , musí být v XAML uvozena, \uf30c takže se změní na  .
Tady je spuštěný program:
Informace o zobrazování ikon písem zadáním dat ikony písma v objektu FontImageSource najdete v tématu Zobrazení ikon FontImageSource.
Rozšíření značek AppThemeBinding
Rozšíření značek umožňuje určit prostředek, který se má použít, jako je obrázek nebo barva, na základě aktuálního AppThemeBinding systémového motivu.
Důležité
Rozšíření AppThemeBinding značek má minimální požadavky na operační systém. Další informace naleznete v tématu Respond to system theme changes in Xamarin.Forms applications.
Rozšíření AppThemeBinding značek je podporováno AppThemeBindingExtension třídou , která definuje následující vlastnosti:
Default, typuobject, který nastavíte na prostředek, který se má použít ve výchozím nastavení.Light, typuobject, který nastavíte na prostředek, který se má použít, když zařízení používá světlý motiv.Dark, typuobject, který nastavíte na prostředek, který se má použít, když zařízení používá tmavý motiv.Value, typu , který vrací prostředek, který je aktuálněobjectpoužíván rozšířením značek.
Poznámka
Analyzátor XAML umožňuje AppThemeBindingExtension zkrácení třídy jako AppBindingTheme .
Vlastnost Default je vlastnost content objektu AppThemeBindingExtension . Proto u výrazů značek XAML vyjádřených složenou závorkou můžete část výrazu eliminovat za předpokladu, že se jedná Default= o první argument.
Ukázková stránka AppThemeBinding ukazuje, jak používat rozšíření značek:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MarkupExtensions.AppThemeBindingDemoPage"
Title="AppThemeBinding Demo">
<ContentPage.Resources>
<Style x:Key="labelStyle"
TargetType="Label">
<Setter Property="TextColor"
Value="{AppThemeBinding Black, Light=Blue, Dark=Teal}" />
</Style>
</ContentPage.Resources>
<StackLayout Margin="20">
<Label Text="This text is green in light mode, and red in dark mode."
TextColor="{AppThemeBinding Light=Green, Dark=Red}" />
<Label Text="This text is black by default, blue in light mode, and teal in dark mode."
Style="{StaticResource labelStyle}" />
</StackLayout>
</ContentPage>
V tomto příkladu je barva prvního textu nastavená na zelenou, když zařízení používá světlý motiv, a je nastavená na červenou, když zařízení používá Label tmavý motiv. Druhá má Label svou vlastnost Xamarin_Forms Label _Label_TextColor" data-linktype="absolute-path">TextColor vlastnost nastavenou prostřednictvím Style . Tím se ve výchozím nastavení nastaví barva textu na černou, modrá, když zařízení používá světlý motiv, a našly se, když zařízení používá StyleLabel tmavý motiv.
Tady je spuštěný program:

Definování rozšíření značek
Pokud jste narazili na potřebu rozšíření značek XAML, které není k dispozici v Xamarin.Forms , můžete si vytvořit Xamarin.Forms.
Stažení ukázky



