Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Język XAML w wieloplatformowych aplikacjach .NET (.NET MAUI) zapewnia obsługę użycia ogólnych typów CLR, poprzez określenie ogólnych ograniczeń jako argumentów typu. Ta obsługa jest zapewniana przez dyrektywę x:TypeArguments, która przekazuje argumenty typu ograniczającego generika do konstruktora generika.
Argumenty typu są określane jako ciąg i są zwykle prefiksowane, takie jak sys:String i sys:Int32. Prefiksowanie jest wymagane, ponieważ typowe typy ograniczeń ogólnych CLR pochodzą z bibliotek, które nie są mapowane na domyślne przestrzenie nazw .NET MAUI. Jednak wbudowane typy XAML 2009, takie jak x:String i x:Int32, można również określić jako argumenty typu, gdzie x jest przestrzenią nazw języka XAML dla XAML 2009. Aby uzyskać więcej informacji na temat wbudowanych typów XAML 2009, zobacz XAML 2009 Language Primitives.
Ważny
Definiowanie typów ogólnych w kodzie XAML programu .NET MAUI z dyrektywą x:TypeArguments jest nieobsługiwane.
Argumenty wielu typów można określić za pomocą ogranicznika przecinka. Ponadto, jeśli ograniczenie ogólne używa typów ogólnych, zagnieżdżone argumenty typu ograniczeń powinny być zawarte w nawiasach.
Notatka
Rozszerzenie składni x:Type dostarcza odwołanie do typu środowiska uruchomieniowego .NET (CLR) dla typu ogólnego i pełni funkcję podobną do operatora typeof w języku C#. Aby uzyskać więcej informacji, zobacz x:Type markup extension.
Aby uzyskać informacje na temat określania typów ogólnych w kodzie XAML w .NET MAUI za pomocą dyrektyw x:DataType i x:Type, zobacz Wiązania kompilacji, które określają typ ogólny oraz rozszerzenie znaczników x:Type.
Argument pojedynczego typu pierwotnego
Jeden argument typu prymitywnego można określić jako argument w formie ciągu z prefiksem przy użyciu dyrektywy x:TypeArguments.
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
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>
W tym przykładzie System.Collections.Generic jest definiowana jako scg przestrzeni nazw XAML. Właściwość CollectionView.ItemsSource jest ustawiona na List<T>, która jest tworzona za pomocą argumentu typu string przy użyciu wbudowanego typu XAML 2009 x:String. Kolekcja List<string> jest inicjowana z wieloma elementami string.
Alternatywnie można utworzyć wystąpienie kolekcji List<T> przy użyciu typu String CLR:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
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>
Argument typu pojedynczego obiektu
Argument typu pojedynczego obiektu można określić jako argument ciągu prefiksu przy użyciu dyrektywy x:TypeArguments:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
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 x:DataType="models:Monkey">
<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>
W tym przykładzie GenericsDemo.Models jest definiowana jako przestrzeń nazw models XAML, a System.Collections.Generic jest definiowana jako przestrzeń nazw scg XAML. Właściwość CollectionView.ItemsSource jest ustawiona na List<T>, która jest utworzona przy użyciu argumentu typu Monkey. Kolekcja List<Monkey> jest inicjowana wieloma elementami Monkey, a DataTemplate, który definiuje wygląd każdego obiektu Monkey, jest ustawiany jako ItemTemplate dla CollectionView.
Argumenty wielokrotnego typu
Argumenty wielu typów można określić jako prefiksowe argumenty ciągów rozdzielane przecinkami przy użyciu dyrektywy x:TypeArguments. Gdy ograniczenie ogólne używa typów ogólnych, argumenty typu ograniczenia zagnieżdżonego są zawarte w nawiasach:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
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 x:DataType="scg:KeyValuePair(x:String,models:Monkey)">
<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
W tym przykładzie GenericsDemo.Models jest definiowana jako przestrzeń nazw models XAML, a System.Collections.Generic jest definiowana jako przestrzeń nazw scg XAML. Właściwość CollectionView.ItemsSource jest ustawiona na List<T>, która tworzy wystąpienie z ograniczeniem KeyValuePair<TKey, TValue>, z argumentami typu ograniczeń wewnętrznych string i Monkey. Kolekcja List<KeyValuePair<string,Monkey>> jest inicjalizowana z wieloma elementami KeyValuePair, wykorzystując konstruktora KeyValuePair innego niż domyślny, i DataTemplate, który definiuje wygląd każdego obiektu Monkey, jest ustawiony jako ItemTemplate z CollectionView. Aby uzyskać informacje na temat przekazywania argumentów do konstruktora innego niż domyślny, zobacz Przekazywanie argumentów do konstruktora.