XAML işaretleme uzantılarını kullanma
.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) 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.
Örneğin, genellikle özelliğini şu şekilde ayarlarsınız Color
BoxView :
<BoxView Color="Blue" />
Ancak, özniteliğini kaynak sözlüğünde depolanan bir değerden ya da oluşturduğunuz bir sınıfın statik özelliğinin değerinden ya da sayfadaki başka bir öğenin türündeki Color bir özellikten ya Color
da ayrı ton, doygunluk ve parlaklık değerlerinden oluşturmayı tercih edebilirsiniz. Tüm bu seçenekler XAML işaretleme uzantıları kullanılarak mümkündür.
İşaretlemeyi genişletme, bir öğenin özniteliğini ifade etmenin farklı bir yoludur. .NET MAUI XAML işaretleme uzantıları genellikle küme ayraçları içine alınmış bir öznitelik değeriyle tanımlanabilir:
<BoxView Color="{StaticResource themeColor}" />
Küme ayraçlarındaki herhangi bir öznitelik değeri her zaman bir XAML işaretleme uzantısıdır. Ancak, XAML işaretleme uzantılarına küme ayracı kullanılmadan da başvurulabilir.
Dekont
Ç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çıklanan işaretleme uzantılarına ek olarak, .NET MAUI'de aşağıdaki işaretleme uzantıları da yer alır ve diğer makalelerde ele alınır:
AppThemeBinding
- Geçerli sistem temasına göre kullanılacak kaynağı belirtir. Daha fazla bilgi için bkz . AppThemeBinding işaretleme uzantısı.Binding
- iki nesnenin özellikleri arasında bir bağlantı kurar. Daha fazla bilgi için bkz . Veri bağlama.DynamicResource
- Kaynak sözlüğündeki nesnelerdeki değişikliklere yanıt verir. Daha fazla bilgi için bkz . Dinamik stiller.FontImage
- bir görüntüleyebilen herhangi bir görünümde bir ImageSourceyazı tipi simgesi görüntüler. Daha fazla bilgi için bkz . Yazı tipi simgesi yükleme.OnIdiom
- Uygulamanın üzerinde çalıştığı cihazın deyimine göre kullanıcı arabirimi görünümünü özelleştirir. Daha fazla bilgi için bkz . Cihaz deyimine göre kullanıcı arabirimi görünümünü özelleştirme.OnPlatform
- Kullanıcı arabirimi görünümünü platforma göre özelleştirir. Daha fazla bilgi için bkz . Platforma göre kullanıcı arabirimi görünümünü özelleştirme.RelativeSource
- Bağlama kaynağını bağlama hedefinin konumuna göre ayarlar. Daha fazla bilgi için bkz . Göreli bağlamalar.StaticResource
- kaynak sözlüğündeki nesnelere başvurur. Daha fazla bilgi için bkz . Kaynak sözlükleri.TemplateBinding
- Bir denetim şablonundan veri bağlama gerçekleştirir. Daha fazla bilgi için bkz . Denetim şablonları.
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
bir yolu, önce bu sınıf gibi AppConstants
bazı sabitler veya statik değişkenler içeren bir sınıf tanımlamaktır:
static class AppConstants
{
public static double NormalFontSize = 18;
}
Aşağıdaki XAML, sınıfı property-element etiketleri arasında Label.FontSize
örneklemeye StaticExtension yönelik en ayrıntılı yaklaşımı gösterir:
<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>
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 söz dizimi, sınıf ve üye ayarını küme ayraçlarına yerleştirerek StaticExtension daha da basitleştirilebilir. Sonuçta elde edilen ifade doğrudan özniteliğine FontSize
ayarlanır:
<Label Text="Label No. 3"
FontSize="{x:StaticExtension Member=local:AppConstants.NormalFontSize}" />
Bu örnekte, küme ayraçlarının içinde tırnak işareti yoktur . 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.
XAML örneğinin kök etiketi, .NET System
ad alanı için bir XML ad alanı bildirimi de içerir. 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" />
Aşağıdaki ekran görüntüsünde XAML çıkışı gösterilmektedir:
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ğlamalarıyla kullanılır. Veri bağlamaları hakkında daha fazla bilgi için bkz . Veri bağlama.
Aşağıdaki XAML örneğinde veri bağlamalarıyla iki kullanım x:Reference
gösterilmektedir; ilki nesnenin Binding
özelliğini ayarlamak Source
için kullanılırken, ikincisi ise iki veri bağlaması BindingContext
için özelliğini ayarlamak için kullanıldığı yerdir:
<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 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 BindingContext="{x:Reference slider}"
Text="{Binding Value, StringFormat='{0:F0}° rotation'}"
Rotation="{Binding Value}"
FontSize="24"
HorizontalOptions="Center"
VerticalOptions="Center" />
</StackLayout>
</ContentPage>
Bu örnekte, 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 Source
ve StringFormat
özellikleri virgülle ayrılır.
Aşağıdaki ekran görüntüsünde XAML çıkışı gösterilmektedir:
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 ayarlanması gereken 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 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.
İşaretlemeyi x:Type
uzantısı yaygın olarak işaretleme uzantısı ile x:Array
kullanılır. Daha fazla bilgi için bkz . x:Dizi işaretleme uzantısı.
Aşağıdaki XAML örneği, .NET MAUI nesnelerinin örneğini oluşturmak ve bunları öğesine StackLayouteklemek için işaretleme uzantısının kullanılmasını x:Type
gösterir. XAML, özellikleri a Binding
ve CommandParameter
özellikleri üç .NET MAUI görünümü türüne ayarlanmış üç Button öğeden Command
oluşur:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
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="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>
Arka planda kod dosyası özelliğini tanımlar ve başlatır 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;
}
}
a Button tuşuna basıldığında bağımsız değişkenin CommandParameter
yeni bir örneği oluşturulur ve öğesine StackLayouteklenir. Ardından üç Button nesne, 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. Bu özellik birx:Type
işaretleme uzantısına ayarlanmalıdır.Items
türündedirIList
. Bu, öğelerin kendileri için bir koleksiyondur. Bu, öğesinin içerik özelliğidir ArrayExtension.
İş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.
Aşağıdaki XAML örneği, özelliğini bir diziye ayarlayarak ItemsSource
öğesine öğe ListView eklemek için nasıl kullanılacağını x:Array
gösterir:
<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>
<ViewCell>
<BoxView Color="{Binding}"
Margin="3" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
Bu örnekte, ViewCell her renk girişi için basit BoxView bir oluşturur:
Dekont
Dizeler veya sayılar gibi yaygın türlerin dizilerini tanımlarken, Geçiş bağımsız değişkenlerinde listelenen XAML dili temel öğeler etiketlerini 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.
Aşağıdaki XAML örneği, işaretleme uzantısının x:Null
nasıl kullanılacağını gösterir:
<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>
Bu örnekte, özelliğini belirli bir yazı tipine ayarlayan FontFamily
bir Setter içeren için Label örtük Style tanımlanır. Ancak, üçüncü Label , örtük stilde tanımlanan yazı tipinin olarak ayarlanarak FontFamily
x:Null
kullanılmasını önler:
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 string
dö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.
Dekont
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 ContentPageDataTemplatedeğ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 . Shell.