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 programach .NET Framework 3.5 i .NET Framework 3.0 typy zaimplementowane do obsługi języka XAML były ogólnie dostępne w System.Windows.Markup przestrzeni nazw. Większość z tych typów znajdowała się w zestawie WindowsBase.

W programie .NET Framework 4 istnieje nowa System.Xaml przestrzeń nazw 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 System.Windows.Markup przestrzeni nazw. Częściowo w celu uniknięcia przerwania mapowań przestrzeni nazw CLR w istniejących implementacjach na plik. W związku z tym System.Windows.Markup przestrzeń nazw 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 obsługi XAML przepływu 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 MarkupExtension klasa dla platformy WPF znajdowała się w zestawie WindowsBase. Klasa równoległa dla programu Windows Workflow Foundation istniała MarkupExtensionw zestawie System.Workflow.ComponentModel. W programie .NET Framework 4 MarkupExtension klasa 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 .NET XAML, 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 MarkupExtension klasie rozszerzenia XAML.

MarkupExtension , klasy usług pomocniczych

Programy .NET Framework 3.5 i .NET Framework 3.0 dla platformy WPF udostępniały kilka usług, które były dostępne dla MarkupExtension implementatorów i TypeConverter implementacji w celu obsługi użycia typu/właściwości w języku XAML. Te usługi są następujące:

Uwaga

Inną usługą z programu .NET Framework 3.5, która jest powiązana z rozszerzeniami znaczników, jest IReceiveMarkupExtension interfejs. IReceiveMarkupExtension nie został zmigrowany i jest oznaczony [Obsolete] jako .NET Framework 4. Scenariusze, które były wcześniej używane IReceiveMarkupExtension , powinny zamiast tego używać XamlSetMarkupExtensionAttribute wywołań zwrotnych atrybutów. 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 uwidocznić użycie rozszerzeń znaczników w znaczników 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 System.Windows.Markup przestrzeni nazw, 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życie
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 to atrybut, który jest przetwarzany przez czytniki XAML i składniki zapisywania XAML z implementacji System.Xaml. Można go zauważyć w strumieniu węzłów 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 Usługi XAML.

Klasy pomocnicze i klasy valueSerializer

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 programach .NET Framework 3.5 i .NET Framework 3.0 ValueSerializer element for WPF znajdował się w zestawie WindowsBase. W programie .NET Framework 4 ValueSerializer klasa 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.

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 bazie danych WindowsBase w programach .NET Framework 3.5 i .NET Framework 3.0, ale istnieje w systemie System.Xaml w programie .NET Framework 4. IComponentConnector jest przeznaczony głównie do obsługi narzędzi i kompilatorów znaczników XAML.

Interfejs INameScope istniał w bazie danych WindowsBase w programach .NET Framework 3.5 i .NET Framework 3.0, ale istnieje w systemie System.Xaml w programie .NET Framework 4. INameScope definiuje podstawowe operacje dla zakresu nazw 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 System.Windows.Markup przestrzeni nazw i zestawie PresentationFramework. Implementacja System.Xaml znajduje się w System.Xaml przestrzeni nazw. Jeśli używasz typów WPF lub pochodzisz z typów WPF, zazwyczaj należy używać implementacji XamlReaderXamlWriter WPF i zamiast implementacji System.Xaml. Aby uzyskać więcej informacji, zobacz Uwagi w System.Windows.Markup.XamlReader temacie 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 include instrukcji dla System.Windows.Markup przestrzeni nazw i System.Xaml , może być konieczne pełne kwalifikacje wywołań do tych interfejsów API w celu rozwiązania typów bez niejednoznaczności.