Usługi XAML

W tym temacie opisano możliwości zestawu technologii nazywanego usługami XAML platformy .NET. Większość opisanych usług i interfejsów API znajduje się w zestawie System.Xaml. Usługi obejmują składniki odczytywania i zapisywania, klasy schematów i fabryki obsługi schematów, przypisywanie klas, wewnętrzną obsługę języka XAML i inne funkcje języka XAML.

O tej dokumentacji

Dokumentacja koncepcyjna dla usług XAML platformy .NET zakłada, że masz doświadczenie z językiem XAML i sposobem, w jaki może on być stosowany do określonej platformy, na przykład Windows Presentation Foundation (WPF) lub Windows Workflow Foundation lub określonego obszaru funkcji technologii, na przykład funkcji dostosowywania kompilacji w elemencie Microsoft.Build.Framework.XamlTypes. W tej dokumentacji nie jest podejmowana próba wyjaśnienia podstaw języka XAML jako języka znaczników, terminologii składni XAML ani innego materiału wprowadzającego. Zamiast tego w tej dokumentacji skupiono się konkretnie na korzystaniu z usług XAML platformy .NET, które są włączone w bibliotece zestawów System.Xaml. Większość z tych interfejsów API jest przeznaczona dla scenariuszy rozszerzalności i integracji języka XAML. Może to obejmować dowolny z następujących scenariuszy:

  • Rozszerzanie możliwości podstawowych składników odczytywania lub zapisywania XAML (bezpośrednie przetwarzanie strumienia węzłów XAML, wyprowadzanie własnego składnika odczytywania lub zapisywania XAML).

  • Definiowanie typów niestandardowych z możliwością używania w języku XAML, które nie mają określonych zależności struktury, oraz przypisywanie typów w celu przekazania ich cech systemowych typu XAML do usług XAML platformy .NET.

  • Hostowanie składników odczytywania lub zapisywania XAML jako składnika aplikacji, takiego jak projektant wizualny lub interakcyjny edytor dla źródeł znaczników XAML.

  • Pisanie konwerterów wartości XAML (rozszerzenia znaczników, konwertery typów dla typów niestandardowych).

  • Definiowanie niestandardowego kontekstu schematu XAML (przy użyciu alternatywnych technik ładowania zestawów dla źródeł typów zapasowych, przy użyciu technik wyszukiwania znanych typów zamiast zawsze odzwierciedlania zestawów, przy użyciu załadowanych koncepcji zestawów, które nie używają środowiska uruchomieniowego języka wspólnego (CLR) AppDomain ani skojarzonego z nim modelu zabezpieczeń).

  • Rozszerzanie podstawowego systemu typów XAML.

  • Używanie technik Lookup lub Invoker do wpływania na system typów XAML i sposobu oceniania kopii zapasowych typów.

Jeśli szukasz materiałów wprowadzających dotyczących XAML jako języka, możesz skorzystać z artykułu Omówienie języka XAML (WPF .NET). W tym temacie omówiono język XAML dla odbiorców, którzy są nowymi użytkownikami zarówno platformy Windows Presentation Foundation (WPF), jak i w zakresie używania znaczników XAML i funkcji języka XAML. Inny przydatny dokument to materiał wprowadzający w artykule Specyfikacja języka XAML.

Usługi XAML platformy .NET i zestaw System.Xaml w architekturze platformy .NET

Usługi XAML platformy .NET i zestaw System.Xaml definiują wiele elementów potrzebnych do obsługi funkcji języka XAML. Obejmuje to klasy bazowe dla składników odczytywania i zapisywania XAML. Najważniejszą funkcją dodaną do usług XAML platformy .NET, która nie była obecna w żadnej implementacji języka XAML specyficznej dla platformy, jest reprezentacja systemu typów dla języka XAML. Reprezentacja systemu typów przedstawia kod XAML w sposób zorientowany obiektowo, który koncentruje się na możliwościach języka XAML bez uwzględniania zależności od określonych możliwości platform.

System typów XAML nie jest ograniczony przez formularz znaczników ani specyfikę czasu wykonywania pochodzenia XAML, nie jest on też ograniczony przez żaden konkretny system typu zapasowego. System typów XAML zawiera reprezentacje obiektów dla typów, składowych, kontekstów schematu XAML, koncepcji na poziomie XML i innych koncepcji języka XAML lub elementów wewnętrznych XAML. Używanie lub rozszerzanie systemu typów XAML umożliwia pozyskiwanie od klas, takich jak składniki odczytywania i zapisywania XAML, oraz rozszerzanie funkcjonalności reprezentacji XAML do określonych funkcji włączonych przez platformę, technologię lub aplikację, która używa kodu XAML lub go emituje. Koncepcja kontekstu schematu XAML umożliwia praktyczne operacje zapisywania wykresu obiektów z połączenia implementacji składnika zapisywania obiektów XAML, systemu typów zapasowych technologii przekazywanego za pośrednictwem informacji o zestawie w kontekście, oraz źródła węzła XAML. Aby uzyskać więcej informacji na temat koncepcji schematu XAML, zobacz Domyślny kontekst schematu XAML i kontekst schematu XAML platformy WPF.

Strumienie węzłów XAML, składniki odczytywania i zapisywania XAML

Aby zrozumieć rolę odgrywaną przez usługi XAML platformy .NET w relacji między językiem XAML a określonymi technologiami, które używają XAML jako języka, warto zrozumieć koncepcję strumienia węzłów XAML oraz sposób, w jaki ta koncepcja kształtuje interfejs API i terminologię. Strumień węzłów XAML to koncepcyjny pośrednik między reprezentacją języka XAML a wykresem obiektów reprezentowanym lub definiowanym przez kod XAML.

  • Składnik odczytywania XAML to jednostka, która przetwarza kod XAML w jakiejś formie i tworzy strumień węzłów XAML. W interfejsie API składnik odczytywania XAML jest reprezentowany przez klasę bazową XamlReader.

  • Składnik zapisywania XAML to jednostka, która przetwarza strumień węzłów XAML i tworzy coś innego. W interfejsie API składnik zapisywania XAML jest reprezentowany przez klasę bazową XamlWriter.

    Dwa najbardziej typowe scenariusze związane z XAML to ładowanie kodu XAML w celu utworzenia wystąpienia wykresu obiektów i zapisywanie wykresu obiektów z aplikacji lub narzędzia oraz utworzenie reprezentacji XAML (zazwyczaj w formie znaczników zapisanych jako plik tekstowy). Ładowanie kodu XAML i tworzenie wykresu obiektów jest często określane w tej dokumentacji jako ścieżka ładowania. Zapisywanie lub serializowanie istniejącego wykresu obiektów w języku XAML jest często określane w tej dokumentacji jako ścieżka zapisu.

    Najczęstszy typ ścieżki ładowania można opisać w następujący sposób:

  • Zacznij od reprezentacji XAML w formacie XML z kodowaniem UTF i zapisanej jako plik tekstowy.

  • Załaduj ten kod XAML do podklasy XamlXmlReader. XamlXmlReader jest podklasą XamlReader.

  • Wynikiem jest strumień węzłów XAML. Dostęp do poszczególnych węzłów strumienia węzłów XAML można uzyskać przy użyciu interfejsu API XamlXmlReader / XamlReader. Tutaj najbardziej typową operacją jest przechodzenie przez strumień węzłów XAML i przetwarzanie każdego węzła przy użyciu metafory „bieżący rekord”.

  • Przekaż wynikowe węzły ze strumienia węzłów XAML do interfejsu API XamlObjectWriter. XamlObjectWriter jest podklasą XamlWriter.

  • Podklasa XamlObjectWriter zapisuje wykres obiektów, po jednym obiekcie naraz, zgodnie z postępem za pośrednictwem źródłowego strumienia węzłów XAML. Zapisywanie obiektów odbywa się z pomocą kontekstu schematu XAML i implementacji, która może uzyskiwać dostęp do zestawów oraz typów systemu typu zapasowego i struktury.

  • Wywołaj element Result na końcu strumienia węzłów XAML, aby uzyskać obiekt główny wykresu obiektów.

    Najczęstszy typ ścieżki zapisu można opisać w następujący sposób:

  • Zacznij od wykresu obiektów całego czasu wykonywania aplikacji, zawartości interfejsu użytkownika i stanu czasu wykonywania lub mniejszego segmentu ogólnej reprezentacji obiektu aplikacji w czasie wykonywania.

  • Z logicznego obiektu początkowego, takiego jak katalog główny aplikacji lub katalog główny dokumentu, załaduj obiekty do podklasy XamlObjectReader. XamlObjectReader jest podklasą XamlReader.

  • Wynikiem jest strumień węzłów XAML. Dostęp do poszczególnych węzłów strumienia węzłów XAML można uzyskać przy użyciu interfejsu API XamlObjectReader i XamlReader. Tutaj najbardziej typową operacją jest przechodzenie przez strumień węzłów XAML i przetwarzanie każdego węzła przy użyciu metafory „bieżący rekord”.

  • Przekaż wynikowe węzły ze strumienia węzłów XAML do interfejsu API XamlXmlWriter. XamlXmlWriter jest podklasą XamlWriter.

  • Składnik XamlXmlWriter zapisuje kod XAML w kodowaniu UTF XML. Można to zapisać jako plik tekstowy, strumień lub w innych formach.

  • Wywołaj metodę Flush, aby uzyskać końcowe dane wyjściowe.

Aby uzyskać więcej informacji na temat koncepcji dotyczących strumienia węzłów XAML, zobacz Opis koncepcji i struktur strumienia węzłów XAML.

Klasa XamlServices

Nie zawsze jest konieczne zajmowanie się strumieniem węzłów XAML. Jeśli potrzebujesz podstawowej ścieżki ładowania lub podstawowej ścieżki zapisu, możesz użyć interfejsów API w klasie XamlServices.

  • Różne sygnatury metody Load implementują ścieżkę ładowania. Możesz załadować plik lub strumień albo załadować element XmlReader, TextReader lub XamlReader, który opakowuje dane wejściowe XAML, ładując je za pomocą interfejsu API tego składnika odczytywania.

  • Różne sygnatury elementu Save zapisują wykres obiektów i generują dane wyjściowe jako strumień, plik lub wystąpienie XmlWriter/TextWriter.

  • Transform konwertuje kod XAML, łącząc ścieżkę ładowania i ścieżkę zapisu jako pojedynczą operację. Można użyć innego kontekstu schematu lub innego systemu typów zapasowych dla elementów XamlReader i XamlWriter, co wpływa na sposób przekształcania wynikowego kodu XAML.

Aby uzyskać więcej informacji na temat używania klasy XamlServices, zobacz Klasa XAMLServices i podstawowe odczytywanie lub zapisywanie w języku XAML.

System typów XAML

System typów XAML udostępnia interfejsy API, które są wymagane do pracy z danym pojedynczym węzłem strumienia węzłów XAML.

XamlType to reprezentacja obiektu — tego, co przetwarzasz między początkowym a końcowym węzłem obiektu.

XamlMember to reprezentacja składowej obiektu — tego, co przetwarzasz między początkowym a końcowym węzłem składowej.

Interfejsy API, takie jak GetAllMembers, GetMember i DeclaringType, raportują relacje między elementami XamlType i XamlMember.

Domyślne zachowanie systemu typów XAML implementowane przez usługi XAML platformy .NET jest oparte na środowisku uruchomieniowym języka wspólnego (CLR) i analizie statycznej typów CLR w zestawach przy użyciu odbicia. W związku z tym w przypadku określonego typu CLR domyślna implementacja systemu typów XAML może uwidocznić schemat XAML tego typu i jego składowych oraz raportować go w pojęciach systemu typów XAML. W domyślnym systemie typów XAML koncepcja przypisywania typów jest mapowana na dziedziczenie CLR, a koncepcje wystąpień, typów wartości itd., są również mapowane na obsługujące je zachowania i funkcje środowiska CLR.

Dokumentacja funkcji języka XAML

Aby obsługiwać język XAML, usługi XAML platformy .NET zapewniają konkretną implementację koncepcji języka XAML zgodnie z definicją dla przestrzeni nazw XAML języka XAML. Są one udokumentowane jako konkretne strony referencyjne. Funkcje języka są udokumentowane z perspektywy zachowania tych funkcji języka podczas ich przetwarzania przez czytnik XAML lub składnik zapisywania XAML zdefiniowany przez usługi XAML platformy .NET. Aby uzyskać więcej informacji, zobacz Funkcje języka przestrzeni nazw XAML (x:).