Typy ogólne w języku XAML
Usługi XAML platformy .NET wdrożone w System.Xaml zapewniają obsługę używania ogólnych typów CLR. Ta obsługa obejmuje określanie ograniczeń typów ogólnych jako argumentu typu i wymuszanie ograniczenia przez wywołanie odpowiedniej metody Add
dla ogólnych przypadków kolekcji. W tym temacie opisano aspekty używania i odwoływania się do typów ogólnych w języku XAML.
x:TypeArguments
x:TypeArguments
jest dyrektywą zdefiniowaną przez język XAML. Gdy jest używany jako element członkowski typu XAML, który jest wspierany przez typ ogólny, x:TypeArguments
przekazuje argumenty typu ograniczenia ogólnego do konstruktora kopii zapasowej. Aby zapoznać się ze składnią referencyjną dotyczącą korzystania z usług XAML platformy .NET x:TypeArguments
, która zawiera przykłady składni, zobacz x:TypeArguments, dyrektywa.
Ponieważ x:TypeArguments
przyjmuje ciąg i ma tworzenie kopii zapasowej konwertera typów, zwykle jest deklarowany w użyciu XAML jako atrybut.
W strumieniu węzła XAML informacje zadeklarowane przez x:TypeArguments
można uzyskać z XamlType.TypeArguments w pozycji StartObject
w strumieniu węzła. Wartość zwracana XamlType.TypeArguments jest listą wartości XamlType. Określenie, czy typ XAML reprezentuje typ ogólny, można wywołać metodę XamlType.IsGeneric.
Reguły i konwencje składni dla typów ogólnych w języku XAML
W języku XAML typ ogólny musi być zawsze reprezentowany jako ograniczony rodzaj. Nieprzeciągnięty rodzaj ogólny nigdy nie istnieje w systemie typów XAML lub strumieniu węzła XAML i nie może być reprezentowany w znacznikach XAML. Ogólne można odwoływać się do składni atrybutu XAML w przypadkach, gdy jest to ograniczenie typu zagnieżdżonego ogólnego, do którego odwołuje się x:TypeArguments
, lub w przypadkach, gdy x:Type
dostarcza odwołanie typu CLR dla typu ogólnego. Odwoływanie się do typów ogólnych jest obsługiwane za pośrednictwem klasy XamlTypeTypeConverter zdefiniowanej przez usługi XAML platformy .NET.
Formularz składni atrybutów XAML włączony przez XamlTypeTypeConverter zmienia typową konwencję składni MSIL / CLR, która używa nawiasów kątowych dla typów i ograniczeń typów ogólnych, a zamiast tego zastępuje nawiasy dla kontenera ograniczeń. Aby zapoznać się z przykładem, zobacz x:TypeArguments, dyrektywa.
Funkcje ogólne i XAML 2009
Jeśli używasz języka XAML 2009 zamiast mapowania typów podstawowych CLR do uzyskiwania typów XAML dla typów pierwotnych języka wspólnego, możesz użyć wbudowanych typów XAML 2009 jako elementów informacji w x:TypeArguments
. Można na przykład zadeklarować następujące (mapowania prefiksów nie są wyświetlane, ale x
to przestrzeń nazw XAML języka XAML dla języka XAML 2009):
<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>
Obsługa typów ogólnych w WPF
W przypadku użycia XAML 2006 w przypadku określania wartości docelowej WPF należy również podać x:Class w tym samym elemecie co x:TypeArguments
, a element musi być elementem głównym w dokumencie XAML. Element główny musi być mapowy na typ ogólny z co najmniej jednym argumentem typu. Przykładem jest PageFunction<T>.
Możliwe obejścia dotyczące obsługi ogólnych użycia obejmują definiowanie niestandardowego rozszerzenia znaczników, które może zwracać typy ogólne, lub dostarczanie definicji klasy zawijania pochodzącej z typu ogólnego, ale spłaszczania ogólnego ograniczenia w własnej definicji klasy.
W WPF można używać funkcji XAML 2009 razem z x:TypeArguments
, ale tylko dla luźnego XAML (XAML, który nie jest skompilowany). Kod XAML skompilowany w języku XAML dla platformy WPF i formularza BAML języka XAML nie obsługuje obecnie słów kluczowych i funkcji XAML 2009.
Niestandardowe przepływy pracy w programie Windows Workflow Foundation dla programu .NET Framework 3.5 nie obsługują ogólnego użycia kodu XAML.
Zobacz też
.NET Desktop feedback