Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
XAML işaretleme uzantıları, öğe özniteliklerinin çeşitli kaynaklardan ayarlanmasına izin vererek XAML'nin gücünü ve esnekliğini geliştirmeye yardımcı olur. Çeşitli XAML işaretleme uzantıları XAML 2009 belirtiminin bir parçasıdır. Bunlar, özel x ad alanı ön ekine sahip XAML dosyalarında görünür ve genellikle bu ön ek ile adlandırılır. Bu makalede aşağıdaki işaretleme uzantıları ele alınmaktadır:
x:Static– statik özelliklere, alanlara veya numaralandırma üyelerine başvurun.x:Reference– sayfadaki adlandırılmış öğelere başvurur.x:Type– bir nesneyeSystem.Typebir öznitelik ayarlayın.x:Array– belirli bir türdeki nesnelerin dizisini oluşturur.x:Null– özniteliğini birnulldeğer olarak ayarlayın.OnPlatform– Kullanıcı arabirimi görünümünü platforma göre özelleştirin.OnIdiom– Uygulamanın üzerinde çalıştığı cihazın deyimine göre kullanıcı arabirimi görünümünü özelleştirin.DataTemplate– bir türü içineDataTemplatedönüştürür.FontImage– bir görüntüleyebilen herhangi bir görünümde birImageSourceyazı tipi simgesi görüntüleyin.AppThemeBinding– geçerli sistem temasını temel alan bir kaynak kullanın.
Ek XAML işaretleme uzantıları geçmişte diğer XAML uygulamaları tarafından desteklenmiştir ve tarafından Xamarin.Formsda desteklenir. Bunlar diğer makalelerde daha ayrıntılı olarak açıklanmıştır:
StaticResource- Kaynak Sözlükleri makalesinde açıklandığı gibi kaynak sözlüğündeki başvuru nesneleri.DynamicResource- Dinamik Stiller makalesinde açıklandığı gibi kaynak sözlüğündeki nesnelerdeki değişikliklere yanıt verin.Binding- Veri Bağlama makalesinde açıklandığı gibi iki nesnenin özellikleri arasında bir bağlantı oluşturun.TemplateBinding- Makale Xamarin.Forms denetim şablonlarında açıklandığı gibi bir denetim şablonundan veri bağlama gerçekleştirir.RelativeSource- Göreli Bağlamalar makalesinde açıklandığı gibi bağlama kaynağını bağlama hedefinin konumuna göre ayarlar.
Düzen, RelativeLayout özel işaretleme uzantısını ConstraintExpressionkullanır. Bu işaretleme uzantısı RelativeLayout makalesinde açıklanmıştır.
x:Statik işaretleme uzantısı
biçimlendirme x:Static uzantısı sınıfı tarafından StaticExtension desteklenir. sınıfı, ortak sabit, statik özellik, statik alan veya numaralandırma üyesinin adına ayarladığınız tür string adlı Member tek bir özelliğe sahiptir.
Kullanmanın x:Static yaygın yollarından biri, önce bu küçük AppConstants sınıf gibi bazı sabitler veya statik değişkenler içeren bir sınıf tanımlamaktır:
static class AppConstants
{
public static double NormalFontSize = 18;
}
x:Static Tanıtım sayfası, işaretleme uzantısını x:Static kullanmanın çeşitli yollarını gösterir. En ayrıntılı yaklaşım, property-element etiketleri arasında Label.FontSize sınıfın örneğini StaticExtension oluşturur:
<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>
XAML ayrıştırıcısı, sınıfın StaticExtension olarak x:Statickısaltılmasını da sağlar:
<Label Text="Label No. 2">
<Label.FontSize>
<x:Static Member="local:AppConstants.NormalFontSize" />
</Label.FontSize>
</Label>
Bu daha da basitleştirilebilir, ancak değişiklik bazı yeni söz dizimlerini ortaya koyar: Sınıf ve üye ayarını küme ayraçlarına yerleştirmektir StaticExtension . Sonuçta elde edilen ifade doğrudan özniteliğine FontSize ayarlanır:
<Label Text="Label No. 3"
FontSize="{x:StaticExtension Member=local:AppConstants.NormalFontSize}" />
Küme ayraçlarının içinde tırnak işareti olmadığına dikkat edin. Member özelliği StaticExtension artık bir XML özniteliği değildir. Bunun yerine, işaretleme uzantısı için ifadenin bir parçasıdır.
Bunu bir nesne öğesi olarak kullanırken kısaltabileceğiniz x:StaticExtension x:Static gibi, küme ayraçları içindeki ifadede de kısaltabilirsiniz:
<Label Text="Label No. 4"
FontSize="{x:Static Member=local:AppConstants.NormalFontSize}" />
sınıfı, StaticExtension bu özelliği sınıfın varsayılan içerik özelliği olarak işaretleyen özelliğine Memberbaşvuran bir ContentProperty özniteliğine sahiptir. Küme ayraçlarıyla ifade edilen XAML işaretleme uzantıları için ifadenin Member= bölümünü ortadan kaldırabilirsiniz:
<Label Text="Label No. 5"
FontSize="{x:Static local:AppConstants.NormalFontSize}" />
Bu, işaretleme uzantısının x:Static en yaygın biçimidir.
Statik Tanıtım sayfası iki örnek daha içerir. XAML dosyasının kök etiketi .NET System ad alanı için bir XML ad alanı bildirimi içerir:
xmlns:sys="clr-namespace:System;assembly=netstandard"
Bu, yazı tipi boyutunun Label statik alanına Math.PIayarlanmasını sağlar. Bu, oldukça küçük bir metinle sonuçlandığından Scale özelliği olarak Math.Eayarlanır:
<Label Text="π × E sized text"
FontSize="{x:Static sys:Math.PI}"
Scale="{x:Static sys:Math.E}"
HorizontalOptions="Center" />
Son örnekte değer görüntülenir Device.RuntimePlatform . statik Environment.NewLine özelliği, iki Span nesne arasına yeni satır karakteri eklemek için kullanılır:
<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>
Çalışan örnek şu şekildedir:
x:Başvuru işaretleme uzantısı
biçimlendirme x:Reference uzantısı sınıfı tarafından ReferenceExtension desteklenir. sınıfı, ile bir ad verilen sayfadaki bir öğenin adına ayarladığınız tür string adlı Name x:Nametek bir özelliğe sahiptir. Bu Name özellik öğesinin içerik özelliğidir ReferenceExtension, bu nedenle Name= küme ayraçlarında göründüğünde x:Reference gerekli değildir.
İşaretleme x:Reference uzantısı yalnızca Veri Bağlama makalesinde daha ayrıntılı olarak açıklanan veri bağlamalarıyla kullanılır.
x:Reference Tanıtım sayfası, veri bağlamaları ile iki kullanım x:Reference gösterir; ilk olarak nesnenin Binding özelliğini ayarlamak Source için kullanılır ve ikincisi iki veri bağlaması BindingContext için özelliğini ayarlamak için kullanılır:
<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>
Her iki ifade de x:Reference sınıf adının kısaltılmış sürümünü ReferenceExtension kullanır ve ifadenin Name= bölümünü ortadan kaldırır. İlk örnekte, x:Reference işaretleme uzantısı işaretleme uzantısına Binding eklenir. ve StringFormat ayarlarının virgülle ayrıldığına Source dikkat edin. Çalışan program şu şekildedir:
x:Tür işaretleme uzantısı
İşaretlemeyi x:Type uzantısı C# typeof anahtar sözcüğü XAML eşdeğeridir. Sınıf veya yapı adına ayarlanmış türü string adlı TypeName bir özelliği tanımlayan sınıfı tarafından TypeExtension desteklenir. İşaretlemeyi x:Type uzantısı, bu sınıfın System.Type veya yapının nesnesini döndürür. TypeName öğesinin içerik özelliğidir TypeExtension, bu nedenle TypeName= küme ayraçlarıyla birlikte görüntülendiğinde x:Type gerekli değildir.
içinde Xamarin.Forms, türünde Typebağımsız değişkenler içeren birkaç özellik vardır. Genel sınıflarda TargetType Stylebağımsız değişkenleri belirtmek için kullanılan özelliği ve x:TypeArguments özniteliği örnek olarak verilebilir. Ancak, XAML ayrıştırıcısı typeof işlemi otomatik olarak gerçekleştirir ve x:Type işaretleme uzantısı bu durumlarda kullanılmaz.
Gerekli x:Array olan bir yer x:Type , bir sonraki bölümde açıklanan işaretleme uzantısıdır.
İşaretleme x:Type uzantısı, her menü öğesinin belirli bir türdeki bir nesneye karşılık geldiği bir menü oluştururken de yararlıdır. Bir Type nesneyi her menü öğesiyle ilişkilendirebilir ve ardından menü öğesi seçildiğinde nesnenin örneğini oluşturabilirsiniz.
İşaretleme Uzantıları programındaki MainPage gezinti menüsü bu şekilde çalışır. MainPage.xaml dosyası, programdaki belirli bir sayfaya karşılık gelen her TextCell biriyle birlikte bir içerirTableView:
<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>
İşaretleme Uzantıları'nın açılış ana sayfası aşağıdadır:
Her CommandParameter özellik, diğer sayfalardan birine başvuran bir x:Type işaretleme uzantısına ayarlanır. Command özelliği adlı NavigateCommandbir özelliğe bağlıdır. Bu özellik arka planda kod dosyasında tanımlanır MainPage :
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; }
}
NavigateCommand özelliği, türünde Type bağımsız değişken içeren bir yürütme komutu uygulayan bir nesnedirCommand; değeridirCommandParameter. yöntemi, sayfayı örneklemek için kullanır Activator.CreateInstance ve ardından sayfaya gider. Oluşturucu, sayfanın kendisini ayarlayarak BindingContext sonuç verir ve bu da açık Command öğesinin Binding çalışmasını sağlar. Bu kod türü hakkında daha fazla ayrıntı için Veri Bağlama makalesine ve özellikle Komut makalesine bakın.
x:Type Tanıtım sayfası, öğelerin örneğini Xamarin.Forms oluşturmak ve bunları öğesine eklemek için benzer bir StackLayoutteknik kullanır. XAML dosyası başlangıçta özellikleri a Binding ve özellikleri üç görünüm türüne ayarlanmış üç Xamarin.Forms Button öğeden Command CommandParameter oluşur:
<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>
Arka planda kod dosyası özelliğini tanımlar ve başlatır CreateCommand :
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; }
}
tuşuna basıldığında Button yürütülen yöntem bağımsız değişkenin yeni bir örneğini oluşturur, özelliğini ayarlar VerticalOptions ve öğesine StackLayoutekler. Ardından üç Button öğe, sayfayı dinamik olarak oluşturulan görünümlerle paylaşır:
x:Dizi işaretleme uzantısı
İşaretlemeyi x:Array uzantısı, işaretlemede bir dizi tanımlamanızı sağlar. İki özelliği tanımlayan sınıfı tarafından ArrayExtension desteklenir:
TypetüründedirTypeve dizideki öğelerin türünü gösterir.ItemstüründedirIList. Bu, öğelerin kendileri için bir koleksiyondur. Bu, öğesinin içerik özelliğidirArrayExtension.
İşaretleme x:Array uzantısının kendisi hiçbir zaman küme ayracı içinde görünmez. Bunun yerine, x:Array başlangıç ve bitiş etiketleri öğe listesini sınırlandırın. Type özelliğini bir x:Type işaretleme uzantısı olarak ayarlayın.
x:Array Tanıtım sayfası, özelliğini bir ListView dizi olarak ayarlayarak ItemsSource öğesine öğe eklemek için nasıl kullanılacağını x:Array gösterir:
<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>
, ViewCell her renk girişi için basit BoxView bir oluşturur:
Bu dizideki öğeleri tek tek Color belirtmenin birkaç yolu vardır. Bir işaretleme uzantısı kullanabilirsiniz x:Static :
<x:Static Member="Color.Blue" />
Alternatif olarak, bir kaynak sözlüğünden renk almak için de kullanabilirsiniz StaticResource :
<StaticResource Key="myColor" />
Bu makalenin sonuna doğru, yeni bir renk değeri de oluşturan özel bir XAML işaretleme uzantısı göreceksiniz:
<local:HslColor H="0.5" S="1.0" L="0.5" />
Dizeler veya sayılar gibi yaygın türlerin dizilerini tanımlarken, değerleri sınırlandırmak için Oluşturucu Bağımsız Değişkenlerini Geçirme makalesinde listelenen etiketleri kullanın.
x:Null işaretleme uzantısı
biçimlendirme x:Null uzantısı sınıfı tarafından NullExtension desteklenir. Hiçbir özelliği yoktur ve yalnızca C# null anahtar sözcüğüne eşdeğer XAML'dir.
Kar x:Null payı uzantısına nadiren ihtiyaç duyulabilir ve nadiren kullanılır, ancak bu uzantıya ihtiyaç duyarsanız, var olduğuna sevineceksiniz.
x:Null Tanıtım sayfası, uygun olabilecek bir senaryoyu x:Null gösterir. özelliğini platforma bağımlı bir Style Label aile adına ayarlayan FontFamily öğesini Setter içeren örtük bir tanımladığınız varsayılır:
<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>
Ardından öğelerden Label biri için, varsayılan değer olmasını istediğiniz dışındaki örtük Style FontFamilytüm özellik ayarlarını istediğinizi keşfedersiniz. Bu amaçla başka bir Style tane tanımlayabilirsiniz, ancak daha basit bir yaklaşım, merkezde Labelgösterildiği gibi öğesinin Label özelliğini olarak x:NullayarlamaktırFontFamily.
Çalışan program şu şekildedir:
Öğelerin dördünde Label serif yazı tipi olduğuna, ancak ortada Label varsayılan sans-serif yazı tipi olduğuna dikkat edin.
OnPlatform işaretleme uzantısı
OnPlatform işaretleme uzantısı, kullanıcı arabirimi görünümünü platforma göre özelleştirmenizi sağlar. ve On sınıflarıyla aynı işlevselliği OnPlatform sağlar, ancak daha kısa bir gösterim sağlar.
biçimlendirme OnPlatform uzantısı, aşağıdaki özellikleri tanımlayan sınıfı tarafından OnPlatformExtension desteklenir:
Defaulttüründeobject, platformları temsil eden özelliklere uygulanacak varsayılan bir değer olarak ayarlarsınız.Androidtüründedirobjectve Android'de uygulanacak bir değere ayarlarsınız.GTKtüründedirobjectve GTK platformlarına uygulanacak bir değere ayarlarsınız.iOStüründedirobjectve iOS'a uygulanacak bir değere ayarlarsınız.macOSmacOS'ta uygulanacak bir değer olarak ayarladığınız türündedirobject.Tizentürüdürobjectve Tizen platformuna uygulanacak bir değere ayarlarsınız.UWPtüründedirobjectve Evrensel Windows Platformu uygulanacak bir değere ayarlarsınız.WPFtüründeobjectbir değere ayarlarsınız.ConvertertüründeIValueConverterbir uygulamaya ayarlanabilirIValueConverter.ConverterParametertüründeobject, uygulamaya geçirilecekIValueConverterbir değere ayarlanabilir.
Not
XAML ayrıştırıcısı sınıfın OnPlatformExtension olarak OnPlatformkısaltılmasına izin verir.
Default özelliği, içerik özelliğidirOnPlatformExtension. Bu nedenle, küme ayraçlarıyla ifade edilen XAML işaretleme ifadeleri için, ilk bağımsız değişken olması koşuluyla ifadenin bölümünü ortadan kaldırabilirsiniz Default= . Default Özellik ayarlanmadıysa, işaretleme uzantısının BindableProperty.DefaultValue bir BindablePropertyhedefleniyor olması koşuluyla varsayılan olarak özellik değerine ayarlanır.
Önemli
XAML ayrıştırıcısı, işaretleme uzantısını kullanan özelliklere doğru türdeki değerlerin sağlanmasını OnPlatform bekler. Tür dönüştürmesi gerekiyorsa, OnPlatform işaretleme uzantısı tarafından Xamarin.Formssağlanan varsayılan dönüştürücüleri kullanarak bunu gerçekleştirmeye çalışır. Ancak, varsayılan dönüştürücüler tarafından gerçekleştirilemez bazı tür dönüştürmeleri vardır ve bu durumlarda Converter özellik bir IValueConverter uygulamaya ayarlanmalıdır.
OnPlatform Tanıtım sayfasında işaretleme uzantısının OnPlatform nasıl kullanılacağı gösterilir:
<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" />
Bu örnekte, üç OnPlatform ifade de sınıf adının kısaltılmış sürümünü OnPlatformExtension kullanır. Üç OnPlatform işaretleme uzantısı, öğesinin Color, WidthRequestve özelliklerini BoxView iOS, Android ve HeightRequest UWP'de farklı değerlere ayarlar. İşaretleme uzantıları ayrıca belirtilmeyen platformlarda bu özellikler için varsayılan değerler sağlar ve ifadenin Default= bölümünü ortadan kaldırır. Ayarlanan işaretleme uzantısı özelliklerinin virgülle ayrıldığına dikkat edin.
Çalışan program şu şekildedir:
OnIdiom işaretleme uzantısı
İşaretlemeyi OnIdiom genişletme, uygulamanın üzerinde çalıştığı cihazın deyimine göre kullanıcı arabirimi görünümünü özelleştirmenizi sağlar. Aşağıdaki özellikleri tanımlayan sınıfı tarafından OnIdiomExtension desteklenir:
Defaulttüründeobject, cihaz deyimlerini temsil eden özelliklere uygulanacak varsayılan bir değer olarak ayarlarsınız.Phonetüründedirobjectve telefonlara uygulanacak bir değere ayarlarsınız.Tablettüründedirobjectve tabletlere uygulanacak bir değere ayarlarsınız.Desktoptüründedirobjectve masaüstü platformlarına uygulanacak bir değere ayarlarsınız.TVtüründekiobjectbir değeri TV platformlarına uygulanacak şekilde ayarlarsınız.Watchtüründekiobjectbir değeri watch platformlarına uygulanacak şekilde ayarlarsınız.ConvertertüründeIValueConverterbir uygulamaya ayarlanabilirIValueConverter.ConverterParametertüründeobject, uygulamaya geçirilecekIValueConverterbir değere ayarlanabilir.
Not
XAML ayrıştırıcısı sınıfın OnIdiomExtension olarak OnIdiomkısaltılmasına izin verir.
Default özelliği, içerik özelliğidirOnIdiomExtension. Bu nedenle, küme ayraçlarıyla ifade edilen XAML işaretleme ifadeleri için, ilk bağımsız değişken olması koşuluyla ifadenin bölümünü ortadan kaldırabilirsiniz Default= .
Önemli
XAML ayrıştırıcısı, işaretleme uzantısını kullanan özelliklere doğru türdeki değerlerin sağlanmasını OnIdiom bekler. Tür dönüştürmesi gerekiyorsa, OnIdiom işaretleme uzantısı tarafından Xamarin.Formssağlanan varsayılan dönüştürücüleri kullanarak bunu gerçekleştirmeye çalışır. Ancak, varsayılan dönüştürücüler tarafından gerçekleştirilemez bazı tür dönüştürmeleri vardır ve bu durumlarda Converter özellik bir IValueConverter uygulamaya ayarlanmalıdır.
OnIdiom Tanıtım sayfasında işaretleme uzantısının OnIdiom nasıl kullanılacağı gösterilir:
<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" />
Bu örnekte, üç OnIdiom ifade de sınıf adının kısaltılmış sürümünü OnIdiomExtension kullanır. Üç OnIdiom işaretleme uzantısı, öğesinin ColorBoxView , WidthRequestve özelliklerini telefon, tablet ve HeightRequest masaüstü deyimlerindeki farklı değerlere ayarlar. İşaretleme uzantıları, ifadenin bölümünü ortadan kaldırırken Default= belirtilmeyen deyimlerde bu özellikler için varsayılan değerler de sağlar. Ayarlanan işaretleme uzantısı özelliklerinin virgülle ayrıldığına dikkat edin.
Çalışan program şu şekildedir:
DataTemplate işaretleme uzantısı
İşaretlemesi DataTemplate uzantısı, bir türü içine DataTemplatedönüştürmenizi sağlar. sınıfı tarafından DataTemplateExtension desteklenir ve türüne stringdönüştürülecek DataTemplatetürün adına ayarlanmış bir özelliği tanımlarTypeName. TypeName özelliği, içerik özelliğidirDataTemplateExtension. Bu nedenle, küme ayraçlarıyla ifade edilen XAML işaretleme ifadeleri için ifadenin TypeName= bölümünü ortadan kaldırabilirsiniz.
Not
XAML ayrıştırıcısı sınıfın DataTemplateExtension olarak DataTemplatekısaltılmasına izin verir.
Bu işaretleme uzantısının tipik bir kullanımı, aşağıdaki örnekte gösterildiği gibi bir Shell uygulamasındadır:
<ShellContent Title="Monkeys"
Icon="monkey.png"
ContentTemplate="{DataTemplate views:MonkeysPage}" />
Bu örnekte, MonkeysPage özelliğin değeri ShellContent.ContentTemplate olarak ayarlanan bir ContentPage DataTemplatedeğerinden değerine dönüştürülür. Bu, uygulamanın başlatılması yerine yalnızca sayfaya gezinti gerçekleştiğinde oluşturulmasını sağlar MonkeysPage .
Shell uygulamaları hakkında daha fazla bilgi için bkz Xamarin.Forms . Shell.
FontImage işaretleme uzantısı
İşaretlemeyi FontImage genişletme, bir yazı tipi simgesini görüntüleyebilen herhangi bir ImageSourcegörünümde görüntülemenizi sağlar. Sınıfıyla aynı işlevselliği FontImageSource sağlar, ancak daha kısa bir gösterim sağlar.
biçimlendirme FontImage uzantısı, aşağıdaki özellikleri tanımlayan sınıfı tarafından FontImageExtension desteklenir:
FontFamilytüründestring, yazı tipi simgesinin ait olduğu yazı tipi ailesi.Glyphyazınstring, yazı tipi simgesinin unicode karakter değeri.ColortüründeColor, yazı tipi simgesi görüntülenirken kullanılacak renk.Sizetüründedouble, işlenen yazı tipi simgesinin cihazdan bağımsız birimlerdeki boyutu. Varsayılan değer 30’dur. Ayrıca, bu özellik adlandırılmış yazı tipi boyutuna ayarlanabilir.
Not
XAML ayrıştırıcısı sınıfın FontImageExtension olarak FontImagekısaltılmasına izin verir.
Glyph özelliği, içerik özelliğidirFontImageExtension. Bu nedenle, küme ayraçlarıyla ifade edilen XAML işaretleme ifadeleri için, ilk bağımsız değişken olması koşuluyla ifadenin bölümünü ortadan kaldırabilirsiniz Glyph= .
FontImage Tanıtım sayfasında işaretleme uzantısının FontImage nasıl kullanılacağı gösterilir:
<Image BackgroundColor="#D1D1D1"
Source="{FontImage , FontFamily={OnPlatform iOS=Ionicons, Android=ionicons.ttf#}, Size=44}" />
Bu örnekte, sınıf adının kısaltılmış sürümü FontImageExtension , Ionicons yazı tipi ailesinden bir XBox simgesini bir Imageiçinde görüntülemek için kullanılır. İfade ayrıca iOS ve Android'de OnPlatform farklı FontFamily özellik değerleri belirtmek için işaretleme uzantısını kullanır. Buna ek olarak, Glyph= ifadenin bölümü ortadan kalkar ve ayarlanan işaretleme uzantısı özellikleri virgülle ayrılır. Simgenin unicode karakteri olsa \uf30cda, XAML'de kaçış karakterine sahip olması ve bu şekilde olması gerektiğini unutmayın.
Çalışan program şu şekildedir:
Bir FontImageSource nesnede yazı tipi simgesi verilerini belirterek yazı tipi simgelerini görüntüleme hakkında bilgi için bkz . Yazı tipi simgelerini görüntüleme.
AppThemeBinding işaretleme uzantısı
İşaretlemeyi AppThemeBinding genişletme, geçerli sistem temasına göre kullanılacak bir kaynak (resim veya renk gibi) belirtmenizi sağlar.
Önemli
İşaretlemeyi AppThemeBinding genişletmenin en düşük işletim sistemi gereksinimleri vardır. Daha fazla bilgi için bkz. Uygulamalarda sistem teması değişikliklerine Xamarin.Forms yanıt verme.
biçimlendirme AppThemeBinding uzantısı, aşağıdaki özellikleri tanımlayan sınıfı tarafından AppThemeBindingExtension desteklenir:
Default, varsayılan olarak kullanılacak kaynağa ayarladığınız türündedirobject.Light, cihaz ışık temasını kullanırken kullanılacak kaynağa ayarladığınız türündedirobject.Dark, cihaz koyu temasını kullanırken kullanılacak kaynağa ayarladığınız türündedirobject.Value, türündekiobjectbiçimlendirme uzantısı tarafından kullanılmakta olan kaynağı döndürür.
Not
XAML ayrıştırıcısı sınıfın AppThemeBindingExtension olarak AppBindingThemekısaltılmasına izin verir.
Default özelliği, içerik özelliğidirAppThemeBindingExtension. Bu nedenle, küme ayraçlarıyla ifade edilen XAML işaretleme ifadeleri için, ilk bağımsız değişken olması koşuluyla ifadenin bölümünü ortadan kaldırabilirsiniz Default= .
AppThemeBinding Tanıtım sayfasında işaretleme uzantısının AppThemeBinding nasıl kullanılacağı gösterilir:
<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>
Bu örnekte, ilkinin Label metin rengi, cihaz açık temasını kullanırken yeşil olarak, cihaz koyu temasını kullanırken ise kırmızı olarak ayarlanır. İkincisinde Label TextColor özelliği ile ayarlanmıştır Style. Bu Style , öğesinin Label metin rengini varsayılan olarak siyaha, cihaz açık temasını kullanırken maviye ve cihaz koyu temasını kullanırken maviye ayarlar.
Çalışan program şu şekildedir:

İşaretlemeyi tanımlama uzantıları
içinde bulunmayan Xamarin.Formsbir XAML işaretleme uzantısı gereksinimiyle karşılaştıysanız, kendi uzantınızı oluşturabilirsiniz.








