Aracılığıyla paylaş


XAML'de Xamarin.Forms Genel Değerler

Xamarin.Forms XAML, genel kısıtlamaları tür bağımsız değişkenleri olarak belirterek genel CLR türlerini kullanma desteği sağlar. Bu destek, bir genelin x:TypeArguments kısıtlayıcı tür bağımsız değişkenlerini genel türün oluşturucusna geçiren yönergesi tarafından sağlanır.

Önemli

yönergesi ile XAML'de Xamarin.Forms genel sınıfların x:TypeArguments tanımlanması desteklenmez.

Tür bağımsız değişkenleri bir dize olarak belirtilir ve genellikle ve sys:Int32gibi sys:String ön ekleri eklenir. Tipik CLR genel kısıtlama türleri varsayılan Xamarin.Forms ad alanına eşlenmeyen kitaplıklardan geldiğinden ön ek ekleme gereklidir. Ancak, ve x:Int32gibi x:String XAML 2009 yerleşik türleri, XAML 2009 için XAML dili ad alanı olan x tür bağımsız değişkenleri olarak da belirtilebilir. XAML 2009 yerleşik türleri hakkında daha fazla bilgi için bkz . XAML 2009 Dil Temel Bilgileri.

Birden çok tür bağımsız değişkeni virgül sınırlayıcı kullanılarak belirtilebilir. Ayrıca, genel bir kısıtlama genel türler kullanıyorsa, iç içe kısıtlama türü bağımsız değişkenleri parantez içinde bulunmalıdır.

Not

biçimlendirme x:Type uzantısı, genel bir tür için CLR türü başvurusu sağlar ve C# içindeki işlecine typeof benzer bir işleve sahiptir. Daha fazla bilgi için bkz . x:Type işaretleme uzantısı.

Tek temel tür bağımsız değişkeni

Tek bir ilkel tür bağımsız değişkeni, yönergesi x:TypeArguments kullanılarak ön ekli dize bağımsız değişkeni olarak belirtilebilir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard"
             ...>
    <CollectionView>
        <CollectionView.ItemsSource>
            <scg:List x:TypeArguments="x:String">
                <x:String>Baboon</x:String>
                <x:String>Capuchin Monkey</x:String>
                <x:String>Blue Monkey</x:String>
                <x:String>Squirrel Monkey</x:String>
                <x:String>Golden Lion Tamarin</x:String>
                <x:String>Howler Monkey</x:String>
                <x:String>Japanese Macaque</x:String>
            </scg:List>
        </CollectionView.ItemsSource>
    </CollectionView>
</ContentPage>

Bu örnekte, System.Collections.Generic XAML ad alanı olarak scg tanımlanır. CollectionView.ItemsSource özelliği, XAML 2009 yerleşik x:String türü kullanılarak tür bağımsız değişkeniyle örneklenen bir string değerine ayarlanırList<T>. Koleksiyon List<string> birden çok string öğeyle başlatılır.

Alternatif olarak, ancak eşdeğer olarak, koleksiyonun List<T> örneği CLR String türüyle oluşturulabilir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard"
             xmlns:sys="clr-namespace:System;assembly=netstandard"
             ...>
    <CollectionView>
        <CollectionView.ItemsSource>
            <scg:List x:TypeArguments="sys:String">
                <sys:String>Baboon</sys:String>
                <sys:String>Capuchin Monkey</sys:String>
                <sys:String>Blue Monkey</sys:String>
                <sys:String>Squirrel Monkey</sys:String>
                <sys:String>Golden Lion Tamarin</sys:String>
                <sys:String>Howler Monkey</sys:String>
                <sys:String>Japanese Macaque</sys:String>
            </scg:List>
        </CollectionView.ItemsSource>
    </CollectionView>
</ContentPage>

Tek nesne türü bağımsız değişkeni

Tek bir nesne türü bağımsız değişkeni, şu yönerge kullanılarak x:TypeArguments ön ekli dize bağımsız değişkeni olarak belirtilebilir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:models="clr-namespace:GenericsDemo.Models"
             xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard"
             ...>
    <CollectionView>
        <CollectionView.ItemsSource>
            <scg:List x:TypeArguments="models:Monkey">
                <models:Monkey Name="Baboon"
                               Location="Africa and Asia"
                               ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Papio_anubis_%28Serengeti%2C_2009%29.jpg/200px-Papio_anubis_%28Serengeti%2C_2009%29.jpg" />
                <models:Monkey Name="Capuchin Monkey"
                               Location="Central and South America"
                               ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Capuchin_Costa_Rica.jpg/200px-Capuchin_Costa_Rica.jpg" />
                <models:Monkey Name="Blue Monkey"
                               Location="Central and East Africa"
                               ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/BlueMonkey.jpg/220px-BlueMonkey.jpg" />
            </scg:List>
        </CollectionView.ItemsSource>
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Grid Padding="10">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Image Grid.RowSpan="2"
                           Source="{Binding ImageUrl}"
                           Aspect="AspectFill"
                           HeightRequest="60"
                           WidthRequest="60" />
                    <Label Grid.Column="1"
                           Text="{Binding Name}"
                           FontAttributes="Bold" />
                    <Label Grid.Row="1"
                           Grid.Column="1"
                           Text="{Binding Location}"
                           FontAttributes="Italic"
                           VerticalOptions="End" />
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</ContentPage>

Bu örnekte, GenericsDemo.Models XAML ad alanı olarak models tanımlanır ve System.Collections.Generic XAML ad alanı olarak scg tanımlanır. CollectionView.ItemsSource özelliği, tür List<T> bağımsız değişkeniyle örneklene bir Monkey olarak ayarlanır. Koleksiyon List<Monkey> birden çok Monkey öğeyle başlatılır ve her Monkey nesnenin görünümünü tanımlayan bir DataTemplate öğesi olarak ItemTemplateCollectionViewayarlanır.

Birden çok tür bağımsız değişkeni

Birden çok tür bağımsız değişkeni, yönergesi kullanılarak x:TypeArguments virgülle ayrılmış ön ekli dize bağımsız değişkenleri olarak belirtilebilir. Genel bir kısıtlama genel türler kullandığında, iç içe kısıtlama türü bağımsız değişkenleri parantez içinde bulunur:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:models="clr-namespace:GenericsDemo.Models"
             xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard"
             ...>
    <CollectionView>
        <CollectionView.ItemsSource>
            <scg:List x:TypeArguments="scg:KeyValuePair(x:String,models:Monkey)">
                <scg:KeyValuePair x:TypeArguments="x:String,models:Monkey">
                    <x:Arguments>
                        <x:String>Baboon</x:String>
                        <models:Monkey Location="Africa and Asia"
                                       ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Papio_anubis_%28Serengeti%2C_2009%29.jpg/200px-Papio_anubis_%28Serengeti%2C_2009%29.jpg" />
                    </x:Arguments>
                </scg:KeyValuePair>
                <scg:KeyValuePair x:TypeArguments="x:String,models:Monkey">
                    <x:Arguments>
                        <x:String>Capuchin Monkey</x:String>
                        <models:Monkey Location="Central and South America"
                                       ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Capuchin_Costa_Rica.jpg/200px-Capuchin_Costa_Rica.jpg" />   
                    </x:Arguments>
                </scg:KeyValuePair>
                <scg:KeyValuePair x:TypeArguments="x:String,models:Monkey">
                    <x:Arguments>
                        <x:String>Blue Monkey</x:String>
                        <models:Monkey Location="Central and East Africa"
                                       ImageUrl="https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/BlueMonkey.jpg/220px-BlueMonkey.jpg" />
                    </x:Arguments>
                </scg:KeyValuePair>
            </scg:List>
        </CollectionView.ItemsSource>
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Grid Padding="10">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Image Grid.RowSpan="2"
                           Source="{Binding Value.ImageUrl}"
                           Aspect="AspectFill"
                           HeightRequest="60"
                           WidthRequest="60" />
                    <Label Grid.Column="1"
                           Text="{Binding Key}"
                           FontAttributes="Bold" />
                    <Label Grid.Row="1"
                           Grid.Column="1"
                           Text="{Binding Value.Location}"
                           FontAttributes="Italic"
                           VerticalOptions="End" />
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</ContentPage    

Bu örnekte, GenericsDemo.Models XAML ad alanı olarak models tanımlanır ve System.Collections.Generic XAML ad alanı olarak scg tanımlanır. CollectionView.ItemsSource özelliği, iç kısıtlama türü bağımsız değişkenleri string ve Monkeyile bir KeyValuePair<TKey, TValue> kısıtlama ile örnek olarak ayarlanmıştırList<T>. Koleksiyon, varsayılan olmayan oluşturucu kullanılarak birden çok KeyValuePair öğeyle başlatılır ve her Monkey nesnenin görünümünü tanımlayan bir DataTemplate öğesi olarak ayarlanır ItemTemplateCollectionView.KeyValuePairList<KeyValuePair<string,Monkey>> Bağımsız değişkenleri varsayılan olmayan bir oluşturucuya geçirme hakkında bilgi için bkz . Oluşturucu bağımsız değişkenlerini geçirme.