XamlReader Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML.
public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
- Dziedziczenie
-
XamlReader
Przykłady
Poniższy przykład konwertuje element Button na ciąg przy użyciu XamlWriter klasy . Ciąg jest następnie ładowany z powrotem do Button metody statycznej Load w XamlReader klasie .
// Create the Button.
Button originalButton = new Button();
originalButton.Height = 50;
originalButton.Width = 100;
originalButton.Background = Brushes.AliceBlue;
originalButton.Content = "Click Me";
// Save the Button to a string.
string savedButton = XamlWriter.Save(originalButton);
// Load the button
StringReader stringReader = new StringReader(savedButton);
XmlReader xmlReader = XmlReader.Create(stringReader);
Button readerLoadButton = (Button)XamlReader.Load(xmlReader);
' Create the Button.
Dim originalButton As New Button()
originalButton.Height = 50
originalButton.Width = 100
originalButton.Background = Brushes.AliceBlue
originalButton.Content = "Click Me"
' Save the Button to a string.
Dim savedButton As String = XamlWriter.Save(originalButton)
' Load the button
Dim stringReader As New StringReader(savedButton)
Dim xmlReader As XmlReader = XmlReader.Create(stringReader)
Dim readerLoadButton As Button = CType(XamlReader.Load(xmlReader), Button)
Uwagi
Metody synchroniczne Load są statyczne, ale metody asynchroniczne LoadAsync nie są statyczne i wymagają wystąpienia XamlReader klasy do użycia.
Dane wyjściowe Load metod to pojedynczy obiekt, który reprezentuje główny obiekt utworzonego drzewa obiektów lub grafu obiektów. Wykresy obiektów tworzone przez XamlReader program są zwykle dodawane do istniejącego drzewa obiektów aplikacji WPF w czasie wykonywania. W przeciwnym razie nowy graf obiektu jest uznawany za odłączony dla celów modelu aplikacji WPF. Oznacza to, że nie jest renderowany i nie można uzyskać dostępu przy użyciu żadnej z technik drzewa obiektów zastosowanej do głównego drzewa obiektów aplikacji WPF (na przykład interfejsów FindNameAPI , LogicalTreeHelper, VisualTreeHelper). Aby uzyskać więcej informacji na temat pojęć dotyczących drzewa obiektów, zobacz Drzewa w WPF.
XamlReader program obsługuje następujące podstawowe scenariusze:
Klonowanie/fabryka obiektów: bez dodatkowych mechanizmów typ odwołania zazwyczaj nie może być uwzględniony w więcej niż jednej pozycji w drzewie obiektów WPF. (Przykłady dodatkowych mechanizmów, które oferują obsługę udostępniania lub ponownego używania w WPF, obejmują obiekty oparte na Freezable, lub obsługę często współużytkowanych obiektów, takich jak Brush , które są przywoływalne jako element z ResourceDictionaryelementu ). Jednym ze sposobów sklonowania obiektu, który znajduje się już w drzewie obiektów, jest serializowanie obiektu przy użyciu polecenia XamlWriter.Save. Następnie użyj zserializowanego ciągu jako danych wejściowych dla wywołania metody Load, ze strumieniem lub XmlReader jako pośrednikiem.
Konstruowanie obiektów opartych na informacjach just in time: często istnieją inne sposoby zmiany stanu istniejących obiektów w przypadku opóźnionego powiązania lub danych wejściowych dostarczonych przez użytkownika. Na przykład można użyć tej samej wartości, aby ustawić więcej niż jedną właściwość lub użyć powiązania danych. Jeśli jednak istnieje scenariusz, w którym nawet typ obiektu do utworzenia można określić tylko w czasie wykonywania lub interakcji użytkownika, utworzenie takiego obiektu przez utworzenie ciągu dla Load danych wejściowych jest często przydatną techniką.
Przy użyciu istniejących technik zasobów: Stream typ jest często używany w innych strukturach lub technologiach do przesyłania danych lub obiektów przez granice aplikacji lub w podobnych sytuacjach. Następnie możesz użyć Stream technik do przechowywania lub uzyskiwania danych sformatowanych w formacie XAML, których ostatecznie użyjesz do utworzenia obiektu w ramach aplikacji.
Naprawiono dokumenty: Aplikacja może załadować lokalne lub pobrane dokumenty XPS w celu włączenia do drzewa obiektów aplikacji WPF i interfejsu użytkownika.
Note
W tej dokumentacji czasami opisano graf obiektu, w przeciwieństwie do drzewa obiektów. Ścisła relacja nadrzędny-podrzędny nie zawsze istnieje w relacjach obiektów czasu wykonywania aplikacji WPF w czasie wykonywania, więc graf obiektu jest bardziej powszechnie obowiązującą terminologią. Jednak ze względu na to, że WPF zawiera również dwa różne interfejsy API koncepcyjne drzewa (LogicalTreeHelper, VisualTreeHelper), metafora drzewa nadal stosuje się odpowiednio do większości rzeczywistych przypadków w WPF. Z perspektywy języka XAML wykres obiektów jest jednak często najlepszym sposobem, aby zastanowić się nad tym, jak obiekty są tworzone z języka XAML, ponieważ sam język XAML nie musi określać metodologii klas pomocnika, które ponownie łączą relacje w strukturze drzewa.
Zabezpieczenia dostępu kodu, luźne XAML i XamlReader
XAML to język znaczników, w którym bezpośrednio reprezentowane jest tworzenie wystąpień obiektów i ich wykonywanie. W związku z tym elementy utworzone w języku XAML mają taką samą możliwość interakcji z zasobami systemowymi (na przykład dostępem do sieci, operacjami we/wy systemu plików), jak w przypadku równoważnego wygenerowanego kodu.
WPF obsługuje zabezpieczenia dostępu kodu platformy zabezpieczeń .NET (CAS). Oznacza to, że zawartość WPF uruchomiona w strefie internetowej ma ograniczone uprawnienia do wykonywania. "Luźne XAML" (strony niekompilowanego kodu XAML interpretowane w czasie ładowania przez przeglądarkę XAML) i aplikację przeglądarki XAML (XBAP) są zwykle uruchamiane w tej strefie internetowej i używają tego samego zestawu uprawnień. Jednak kod XAML załadowany do w pełni zaufanej aplikacji ma taki sam dostęp do zasobów systemowych, jak aplikacja hostingowa. Aby uzyskać więcej informacji, zobacz WPF Partial Trust Security.
Implikacje tych instrukcji są XamlReader takie, że projekt aplikacji musi podejmować decyzje o zaufaniu dotyczące kodu XAML, który zdecydujesz się załadować. Jeśli ładujesz kod XAML, który nie jest zaufany, rozważ zaimplementowanie własnej techniki piaskownicy w celu załadowania wynikowego grafu obiektów.
XamlReader może być również wywoływany przez częściowy kod zaufania. W takim przypadku strefa zabezpieczeń internetu jest stosowana do zabezpieczeń dostępu do kodu. Jeśli coś w załadowanym języku XAML jest nieprawidłowe w strefie zabezpieczeń w Internecie, zgłaszany jest wyjątek analizy XAML. W obszarze XBAP i innych przypadków, które są częściowym zaufaniem na poziomie platformy, gdzie XamlReader jest częścią wykonywania, uzyskujesz takie samo zachowanie wyjątku, jak w przypadku jawnych wywołań częściowo zaufanych.
WPF XAML, czytelnicy/autorzy XAML i przechowywanie wersji języka XAML
XAML2009 zawiera funkcje językowe, takie jak x:Reference i x:FactoryMethod. Możesz użyć podpisów Load lub Parse załadować kod XAML, który używa tych funkcji. Jednak te funkcje języka nie są obsługiwane w przypadku języka XAML, które muszą być skompilowane narzutu (na przykład XAML dla akcji kompilacji strony w aplikacji WPF lub dowolnego XAML, który obejmuje zadanie kompilowania znaczników w akcjach kompilacji).
Typy WPF i technologia WPF w ogóle obsługują koncepcje, które opierają się na dostępie do wewnętrznych WPF. Na przykład sposób implementacji właściwości zależności WPF zależy od wewnętrznych technik efektywnego wyszukiwania składowych typu. Dostęp do tych elementów wewnętrznych jest włączony przez interfejsy API odczytu i zapisywania kodu XAML dostępne w XamlWriter przestrzeni nazw i XamlReader zestawie System.Windows.Markup PresentationFramework. Jednak czytniki XAML niższego poziomu i składniki zapisywania XAML z zestawu System.Xaml (klasy oparte na System.Xaml.XamlReadersystemie System.Xaml.XamlWriter) nie mają dostępu do wewnętrznych WPF. Nie ma zależności od pliku System.Xaml do dowolnego zestawu specyficznego dla platformy WPF. Bez dostępu do wewnętrznych elementów WPF czytniki System.Xaml i autorzy nie mogą poprawnie załadować ani zapisać wszystkich typów WPF lub typów opartych na typach WPF. W szczególności czytelnicy i autorzy System.Xaml nie rozumieją pojęć, takich jak właściwość zależności WPF, magazyn właściwości zapasowych, lub wszystkie specyfiki sposobu, w jaki WPF używa stylów, słowników zasobów i szablonów. W związku z tym możesz dokonać wyboru:
Jeśli ładujesz typy WPF i/lub używasz języka XAML w formularzu BAML w dowolny sposób, użyj czytników XAML i składników XAML PresentationFramework.
Jeśli nie korzystasz z żadnych typów WPF lub formy BAML XAML i nie używasz czytnika XAML innej konkretnej technologii ani implementacji modułu zapisywania XAML ze względów specyficznych dla tej struktury, użyj czytników XAML System.Xaml i składników zapisywania XAML.
Implementacja zapasowa System.Xaml na platformie .NET 4
XamlReader to wywoływana powierzchnia interfejsu API dla analizatora XAML na poziomie platformy WPF. Ten sam podstawowy analizator XAML wykonuje również ładowanie i analizowanie kodu XAML w czasie wykonywania dla aplikacji WPF przeznaczonych dla platform .NET Framework 3.0 i .NET Framework 3.5.
Jeśli używasz platformy .NET Framework 4, zewnętrzny interfejs API jest taki sam, ale części implementacji są oparte na ogólnej implementacji XAML programu .NET Framework 4 w zestawie System.Xaml, co poprawia wiele aspektów technicznych i raportowania analizowania kodu XAML. Określanie platformy .NET Framework 4 musi obejmować system.Xaml jako odwołanie, a szczegóły implementacji, takie jak zgłoszone wyjątki, mogą pochodzić z zdefiniowanych typów System.Xaml.
Konstruktory
| Nazwa | Opis |
|---|---|
| XamlReader() |
Inicjuje nowe wystąpienie klasy XamlReader. |
Metody
| Nazwa | Opis |
|---|---|
| CancelAsync() |
Przerywa bieżącą operację asynchronicznego ładowania, jeśli istnieje oczekująca operacja asynchronicznego ładowania. |
| Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| GetWpfSchemaContext() |
XamlSchemaContext Zwraca obiekt reprezentujący ustawienia kontekstu schematu WPF dla obiektu XamlReader. |
| Load(Stream, Boolean) |
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML. |
| Load(Stream, ParserContext, Boolean) |
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML. |
| Load(Stream, ParserContext) |
Odczytuje dane wejściowe XAML w określonej kodzie Stream i zwraca obiekt, który jest katalogiem głównym odpowiedniego drzewa obiektów. |
| Load(Stream) |
Odczytuje dane wejściowe XAML w określonej kodzie Stream i zwraca element Object , który jest katalogiem głównym odpowiedniego drzewa obiektów. |
| Load(XamlReader) |
Odczytuje dane wejściowe XAML za pośrednictwem podanego XamlReader elementu i zwraca obiekt, który jest katalogiem głównym odpowiedniego drzewa obiektów. |
| Load(XmlReader, Boolean) |
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML. |
| Load(XmlReader) |
Odczytuje dane wejściowe XAML w określonej kodzie XmlReader i zwraca obiekt, który jest katalogiem głównym odpowiedniego drzewa obiektów. |
| LoadAsync(Stream, Boolean) |
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML. |
| LoadAsync(Stream, ParserContext, Boolean) |
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML. |
| LoadAsync(Stream, ParserContext) |
Odczytuje dane wejściowe XAML w określonej kodzie Stream i zwraca katalog główny odpowiedniego drzewa obiektów. |
| LoadAsync(Stream) |
Odczytuje dane wejściowe XAML w określonej kodzie Stream i zwraca katalog główny odpowiedniego drzewa obiektów. |
| LoadAsync(XmlReader, Boolean) |
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML. |
| LoadAsync(XmlReader) |
Odczytuje dane wejściowe XAML w określonej kodzie XmlReader i zwraca katalog główny odpowiedniego drzewa obiektów. |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| Parse(String, Boolean) |
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML. |
| Parse(String, ParserContext, Boolean) |
Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego modułu zapisywania obiektów XAML. |
| Parse(String, ParserContext) |
Odczytuje znaczniki XAML w określonym ciągu tekstowym (przy użyciu określonego ParserContext) i zwraca obiekt odpowiadający elementowi głównemu określonego znacznika. |
| Parse(String) |
Odczytuje dane wejściowe XAML w określonym ciągu tekstowym i zwraca obiekt odpowiadający elementowi głównemu określonego znacznika. |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Zdarzenia
| Nazwa | Opis |
|---|---|
| LoadCompleted |
Występuje po zakończeniu operacji asynchronicznego ładowania. |