Aracılığıyla paylaş


XAML işaretleme uzantılarını kullanma

Browse sample. Örneğe göz atın

.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 ColorBoxView :

<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:

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:Statickı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:StaticExtensionx: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.

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.PIayarlanmasını sağlar. Bu, oldukça küçük bir metinle sonuçlandığından Scale özelliği olarak Math.Eayarlanır:

<Label Text="&#x03C0; &#x00D7; 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:Static demo.

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ı Namex: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ğ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}&#x00B0; 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:Reference demo.

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:Type demo.

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ündedir Typeve dizideki öğelerin türünü gösterir. Bu özellik bir x:Type işaretleme uzantısına ayarlanmalıdır.
  • Items türündedir IList. 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:

x:Array demo.

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 FontFamilyx:Nullkullanılmasını önler:

x:Null demo.

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.

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.