XAML Biçimlendirme Uzantılarını Kullanma
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.Type
bir öznitelik ayarlayın.x:Array
– belirli bir türdeki nesnelerin dizisini oluşturur.x:Null
– özniteliğini birnull
değ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çineDataTemplate
dönüştürür.FontImage
– bir görüntüleyebilen herhangi bir görünümde birImageSource
yazı 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ı ConstraintExpression
kullanı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:Static
kı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 Member
baş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.PI
ayarlanmasını sağlar. Bu, oldukça küçük bir metinle sonuçlandığından Scale
özelliği olarak Math.E
ayarlanı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:Name
tek 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 Type
bağımsız değişkenler içeren birkaç özellik vardır. Genel sınıflarda TargetType
Style
bağı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 yerx: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ı NavigateCommand
bir ö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 StackLayout
teknik kullanır. XAML dosyası başlangıçta özellikleri a Binding
ve özellikleri üç görünüm türüne ayarlanmış üç Xamarin.FormsButton
öğ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 StackLayout
ekler. 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:
Type
türündedirType
ve dizideki öğelerin türünü gösterir.Items
tü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
FontFamily
tü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 Label
gösterildiği gibi öğesinin Label
özelliğini olarak x:Null
ayarlamaktı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:
Default
türündeobject
, platformları temsil eden özelliklere uygulanacak varsayılan bir değer olarak ayarlarsınız.Android
türündedirobject
ve Android'de uygulanacak bir değere ayarlarsınız.GTK
türündedirobject
ve GTK platformlarına uygulanacak bir değere ayarlarsınız.iOS
türündedirobject
ve iOS'a uygulanacak bir değere ayarlarsınız.macOS
macOS'ta uygulanacak bir değer olarak ayarladığınız türündedirobject
.Tizen
türüdürobject
ve Tizen platformuna uygulanacak bir değere ayarlarsınız.UWP
türündedirobject
ve Evrensel Windows Platformu uygulanacak bir değere ayarlarsınız.WPF
türündeobject
bir değere ayarlarsınız.Converter
türündeIValueConverter
bir uygulamaya ayarlanabilirIValueConverter
.ConverterParameter
türündeobject
, uygulamaya geçirilecekIValueConverter
bir değere ayarlanabilir.
Not
XAML ayrıştırıcısı sınıfın OnPlatformExtension
olarak OnPlatform
kı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 BindableProperty
hedefleniyor 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
, WidthRequest
ve ö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:
Default
türündeobject
, cihaz deyimlerini temsil eden özelliklere uygulanacak varsayılan bir değer olarak ayarlarsınız.Phone
türündedirobject
ve telefonlara uygulanacak bir değere ayarlarsınız.Tablet
türündedirobject
ve tabletlere uygulanacak bir değere ayarlarsınız.Desktop
türündedirobject
ve masaüstü platformlarına uygulanacak bir değere ayarlarsınız.TV
türündekiobject
bir değeri TV platformlarına uygulanacak şekilde ayarlarsınız.Watch
türündekiobject
bir değeri watch platformlarına uygulanacak şekilde ayarlarsınız.Converter
türündeIValueConverter
bir uygulamaya ayarlanabilirIValueConverter
.ConverterParameter
türündeobject
, uygulamaya geçirilecekIValueConverter
bir değere ayarlanabilir.
Not
XAML ayrıştırıcısı sınıfın OnIdiomExtension
olarak OnIdiom
kı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 Color
BoxView
, WidthRequest
ve ö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 DataTemplate
dönüştürmenizi sağlar. sınıfı tarafından DataTemplateExtension
desteklenir ve türüne string
dönüştürülecek DataTemplate
tü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 DataTemplate
kı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
DataTemplate
değ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 ImageSource
gö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:
FontFamily
türündestring
, yazı tipi simgesinin ait olduğu yazı tipi ailesi.Glyph
yazınstring
, yazı tipi simgesinin unicode karakter değeri.Color
türündeColor
, yazı tipi simgesi görüntülenirken kullanılacak renk.Size
tü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 FontImage
kı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 Image
iç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 \uf30c
da, 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ündekiobject
biç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 AppBindingTheme
kı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.