Aracılığıyla paylaş


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 nesneye System.Type bir öznitelik ayarlayın.
  • x:Array – belirli bir türdeki nesnelerin dizisini oluşturur.
  • x:Null – özniteliğini bir null 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çine DataTemplatedönüştürür.
  • FontImage – bir görüntüleyebilen herhangi bir görünümde bir ImageSourceyazı 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: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.

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="&#x03C0; &#x00D7; 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: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ğ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}&#x00B0; 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:Başvuru Tanıtımı

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 TargetTypeStylebağı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 MainPagegezinti 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:

Ana Sayfa

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.FormsButton öğeden CommandCommandParameter 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:Type Tanıtımı

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

x:Dizi Tanıtımı

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 StyleLabel 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 StyleFontFamilytü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:

x:Null Tanıtımı

Öğ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ünde object, platformları temsil eden özelliklere uygulanacak varsayılan bir değer olarak ayarlarsınız.
  • Android türündedir objectve Android'de uygulanacak bir değere ayarlarsınız.
  • GTK türündedir objectve GTK platformlarına uygulanacak bir değere ayarlarsınız.
  • iOS türündedir objectve iOS'a uygulanacak bir değere ayarlarsınız.
  • macOS macOS'ta uygulanacak bir değer olarak ayarladığınız türündedir object.
  • Tizen türüdür objectve Tizen platformuna uygulanacak bir değere ayarlarsınız.
  • UWPtüründedir objectve Evrensel Windows Platformu uygulanacak bir değere ayarlarsınız.
  • WPF türünde objectbir değere ayarlarsınız.
  • Converter türünde IValueConverterbir uygulamaya ayarlanabilir IValueConverter .
  • ConverterParameter türünde object, uygulamaya geçirilecek IValueConverter bir 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:

OnPlatform Tanıtımı

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ünde object, cihaz deyimlerini temsil eden özelliklere uygulanacak varsayılan bir değer olarak ayarlarsınız.
  • Phone türündedir objectve telefonlara uygulanacak bir değere ayarlarsınız.
  • Tablet türündedir objectve tabletlere uygulanacak bir değere ayarlarsınız.
  • Desktop türündedir objectve masaüstü platformlarına uygulanacak bir değere ayarlarsınız.
  • TV türündeki objectbir değeri TV platformlarına uygulanacak şekilde ayarlarsınız.
  • Watch türündeki objectbir değeri watch platformlarına uygulanacak şekilde ayarlarsınız.
  • Converter türünde IValueConverterbir uygulamaya ayarlanabilir IValueConverter .
  • ConverterParameter türünde object, uygulamaya geçirilecek IValueConverter bir 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:

OnIdiom Tanıtımı

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

  • FontFamily türünde string, yazı tipi simgesinin ait olduğu yazı tipi ailesi.
  • Glyph yazın string, yazı tipi simgesinin unicode karakter değeri.
  • Color türünde Color, yazı tipi simgesi görüntülenirken kullanılacak renk.
  • Size türünde double, 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 &#xf30c;, 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ı &#xf30c;gerektiğini unutmayın.

Çalışan program şu şekildedir:

FontImage işaretleme uzantısının ekran görüntüsü

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ündedir object.
  • Light, cihaz ışık temasını kullanırken kullanılacak kaynağa ayarladığınız türündedir object.
  • Dark, cihaz koyu temasını kullanırken kullanılacak kaynağa ayarladığınız türündedir object.
  • Value, türündeki objectbiç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 LabelTextColor ö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:

AppThemeBinding Tanıtımı

İş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.