Typy migrowane z WPF do System.Xaml
W programach .NET Framework 3.5 i .NET Framework 3.0 zarówno Windows Presentation Foundation (WPF) i Windows Workflow Foundation zawierały implementację języka XAML. Wiele typów publicznych, które zapewniały rozszerzalność implementacji WPF XAML istniały w zestawach WindowsBase, PresentationCore i PresentationFramework. Podobnie w zestawie System.Workflow.ComponentModel istniały typy publiczne, które zapewniały rozszerzalność kodu XAML programu Windows Workflow Foundation. W programie .NET Framework 4 niektóre typy związane z językiem XAML zostały zmigrowane do zestawu System.Xaml. Wspólna implementacja platformy .NET Framework usług językowych XAML umożliwia korzystanie z wielu scenariuszy rozszerzalności XAML, które zostały pierwotnie zdefiniowane przez implementację XAML określonej platformy, ale są teraz częścią ogólnej obsługi języka XAML programu .NET Framework 4. W tym artykule wymieniono typy, które zostały zmigrowane, i omówiono problemy związane z migracją.
Zestawy i przestrzenie nazw
W .NET Framework 3.5 i .NET Framework 3.0 typy implementowane przez WPF do obsługi XAML były zazwyczaj w przestrzeni nazw System.Windows.Markup. Większość z tych typów znajdowała się w zestawie WindowsBase.
W programie .NET Framework 4 istnieje nowa przestrzeń nazw System.Xaml i nowy zestaw System.Xaml. Wiele typów, które zostały pierwotnie zaimplementowane dla WPF XAML, są teraz udostępniane jako punkty rozszerzalności lub usługi dla dowolnej implementacji XAML. W ramach udostępniania ich dla bardziej ogólnych scenariuszy typy są przekazywane z oryginalnego zestawu WPF do zestawu System.Xaml. Umożliwia to scenariusze rozszerzalności XAML bez konieczności dołączania zestawów innych struktur (takich jak WPF i Windows Workflow Foundation).
W przypadku zmigrowanych typów większość typów pozostaje w przestrzeni nazw System.Windows.Markup. Częściowo w celu uniknięcia przerwania mapowań przestrzeni nazw CLR w istniejących implementacjach dla każdego pliku. W związku z tym przestrzeń nazw System.Windows.Markup w programie .NET Framework 4 zawiera kombinację ogólnych typów obsługi języka XAML (z zestawu System.Xaml) i typów specyficznych dla implementacji XAML WPF (z systemu WindowsBase i innych zestawów WPF). Każdy typ, który został zmigrowany do system.Xaml, ale istniał wcześniej w zestawie WPF, ma obsługę przekazywania typów w wersji 4 zestawu WPF.
Typy wsparcia XAML dla przepływów pracy
Program Windows Workflow Foundation udostępniał również typy obsługi XAML, a w wielu przypadkach miały identyczne krótkie nazwy z odpowiednikiem WPF. Poniżej znajduje się lista typów obsługi XAML programu Windows Workflow Foundation:
Te typy obsługi nadal istnieją w zestawach programu Windows Workflow Foundation dla programu .NET Framework 4 i mogą być nadal używane dla określonych aplikacji programu Windows Workflow Foundation; nie powinny jednak być przywołyne przez aplikacje ani struktury, które nie korzystają z programu Windows Workflow Foundation.
MarkupExtension
W programie .NET Framework 3.5 i .NET Framework 3.0 klasa MarkupExtension dla platformy WPF znajdowała się w zestawie WindowsBase. Klasa równoległa dla programu Windows Workflow Foundation, MarkupExtension, istniała w zestawie System.Workflow.ComponentModel. W programie .NET Framework 4 klasa MarkupExtension jest migrowana do zestawu System.Xaml. W programie .NET Framework 4 MarkupExtension jest przeznaczony dla każdego scenariusza rozszerzalności XAML, który korzysta z usług XAML platformy .NET, a nie tylko dla tych, które opierają się na określonych strukturach. Jeśli to możliwe, określone struktury lub kod użytkownika w strukturze powinny również opierać się na klasie MarkupExtension dla rozszerzenia XAML.
MarkupExtension , klasy usług pomocniczych
.NET Framework 3.5 i .NET Framework 3.0 z myślą o WPF oferowały szereg usług dostępnych dla implementatorów oraz implementacji MarkupExtension i TypeConverter w celu wspierania użycia typów/właściwości w języku XAML. Te usługi są następujące:
Notatka
Inną usługą z programu .NET Framework 3.5, która jest powiązana z rozszerzeniami znaczników, jest interfejs IReceiveMarkupExtension.
IReceiveMarkupExtension nie została zmigrowana i jest oznaczona jako [Obsolete]
dla programu .NET Framework 4. Scenariusze, które wcześniej używały IReceiveMarkupExtension, powinny używać wywołań zwrotnych przypisanych atrybutowi XamlSetMarkupExtensionAttribute zamiast tego.
AcceptedMarkupExtensionExpressionTypeAttribute jest również oznaczony jako [Obsolete]
.
Funkcje języka XAML
W zestawie PresentationFramework istniało kilka funkcji i składników języka XAML dla platformy WPF. Zostały one zaimplementowane jako podklasa MarkupExtension, aby ukazać użycie rozszerzeń znaczników w znacznikach XAML. W programie .NET Framework 4 istnieją one w zestawie System.Xaml, dzięki czemu projekty, które nie zawierają zestawów WPF, mogą korzystać z tych funkcji na poziomie języka XAML. WPF używa tych samych implementacji dla aplikacji .NET Framework 4. Podobnie jak w przypadku innych przypadków wymienionych w tym temacie, typy pomocnicze nadal istnieją w przestrzeni nazw System.Windows.Markup, aby uniknąć przerywania poprzednich odwołań.
Poniższa tabela zawiera listę klas obsługi funkcji XAML zdefiniowanych w pliku System.Xaml.
Funkcja języka XAML | Użytkowanie |
---|---|
ArrayExtension | <x:Array ...> |
NullExtension | {x:Null} |
StaticExtension | {x:Static ...} |
TypeExtension | {x:Type ...} |
Mimo że system.Xaml może nie mieć określonych klas obsługi, ogólna logika przetwarzania funkcji języka XAML dla języka XAML znajduje się teraz w system.Xaml i zaimplementowanych czytnikach XAML i składnikach zapisywania XAML. Na przykład x:TypeArguments
jest atrybutem przetwarzanym przez czytniki XAML i składniki zapisywania XAML z implementacji System.Xaml; Można go zauważyć w strumieniu węzła XAML, ma obsługę w domyślnym kontekście schematu XAML (opartym na CLR), ma reprezentację systemu typów XAML itd. Aby uzyskać więcej informacji na temat dokumentacji referencyjnej dla języka XAML, zobacz XAML Services.
ValueSerializer i klasy pomocnicze
Klasa ValueSerializer obsługuje konwersję typu na ciąg, szczególnie w przypadku przypadków serializacji XAML, w których serializacja może wymagać wielu trybów lub węzłów w danych wyjściowych. W .NET Framework 3.5 i .NET Framework 3.0, ValueSerializer dla WPF znajdował się w zestawie WindowsBase. W programie .NET Framework 4 klasa ValueSerializer znajduje się w pliku System.Xaml i jest przeznaczona dla każdego scenariusza rozszerzalności XAML, a nie tylko dla tych, które są oparte na WPF. IValueSerializerContext (usługa pomocnicza) i DateTimeValueSerializer (określona podklasa) są również migrowane do pliku System.Xaml.
XAML-Related atrybuty
WPF XAML zawiera kilka atrybutów, które można zastosować do typów CLR, aby wskazać coś o ich zachowaniu XAML. Poniżej znajduje się lista atrybutów, które istniały w zestawach WPF w programach .NET Framework 3.5 i .NET Framework 3.0. Te atrybuty są migrowane do pliku System.Xaml w programie .NET Framework 4.
Różne klasy
Interfejs IComponentConnector istniał w programie WindowsBase w programach .NET Framework 3.5 i .NET Framework 3.0, ale istnieje w pliku System.Xaml w programie .NET Framework 4. IComponentConnector jest przeznaczona głównie do obsługi narzędzi i kompilatorów znaczników XAML.
Interfejs INameScope istniał w programie WindowsBase w programach .NET Framework 3.5 i .NET Framework 3.0, ale istnieje w pliku System.Xaml w programie .NET Framework 4. INameScope definiuje podstawowe operacje dla zakresu nazw XAML.
Klasy związane z XAML o takich samych nazwach, które istnieją w WPF i System.Xaml
W zestawach WPF i zestawie System.Xaml w programie .NET Framework 4 istnieją następujące klasy:
XamlReader
XamlWriter
XamlParseException
Implementacja WPF znajduje się w przestrzeni nazw System.Windows.Markup i zestawie PresentationFramework. Implementacja System.Xaml znajduje się w przestrzeni nazw System.Xaml. Jeśli używasz typów WPF lub pochodzisz z typów WPF, zazwyczaj należy używać implementacji WPF XamlReader i XamlWriter zamiast implementacji System.Xaml. Aby uzyskać więcej informacji, zobacz Uwagi w System.Windows.Markup.XamlReader i System.Windows.Markup.XamlWriter.
Jeśli dołączasz odwołania zarówno do zestawów WPF, jak i System.Xaml, a także używasz instrukcji include
dla przestrzeni nazw System.Windows.Markup i System.Xaml, może być konieczne pełne kwalifikowanie wywołań tych interfejsów API, aby rozwiązać typy bez niejednoznaczności.
.NET Desktop feedback