XamlReader Klasa

Definicja

Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego składnika 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 klasy przy użyciu metody statycznej XamlReaderLoad.

// 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 obiekt główny utworzonego drzewa obiektów lub grafu obiektu. 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 rozłączony na potrzeby 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 stosowanej 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 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życia w WPF, obejmują obiekty oparte na Freezableobiekcie lub obsługę powszechnie współużytkowanych obiektów, takich jak Brush te, do których odwołuje się element z klasy ResourceDictionary. Jednym ze sposobów klonowania obiektu, który znajduje się już w drzewie obiektów, jest serializowanie obiektu przy użyciu polecenia XamlWriter.Save. Następnie należy użyć serializowanego ciągu jako danych wejściowych dla wywołania metody Load, ze strumieniem lub XmlReader jako pośrednikiem.

  • Konstruowanie obiektów na podstawie informacji just in time: często istnieją inne sposoby na zmianę stanu istniejących obiektów pod koniec powiązania lub danych wejściowych dostarczonych przez użytkownika. Na przykład możesz użyć tej samej wartości, aby ustawić więcej niż jedną właściwość lub użyć powiązania danych. Jeśli jednak masz scenariusz, w którym nawet typ obiektu do utworzenia jest możliwy tylko do określenia w czasie wykonywania lub interakcji użytkownika, utworzenie takiego obiektu przez utworzenie ciągu dla Load danych wejściowych jest często przydatną techniką.

  • Korzystanie z 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 do włączenia do drzewa obiektów aplikacji WPF i interfejsu użytkownika.

Uwaga

W tej dokumentacji czasami opisano graf obiektu, w przeciwieństwie do drzewa obiektów. Ścisła relacja nadrzędny-podrzędna 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 ponieważ 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 obiektu jest jednak często najlepszym sposobem na przemyślenie sposobu tworzenia obiektów z języka XAML, ponieważ sam język XAML niekoniecznie określa metodologie klas pomocników, które ponownie łączą relacje w strukturze drzewa.

Zabezpieczenia dostępu do 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 (dostęp do sieci, operacje we/wy systemu plików, na przykład) jako odpowiednik wygenerowanego kodu.

Platforma WPF obsługuje zabezpieczenia dostępu kodu platformy .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 Zabezpieczenia częściowe zaufania WPF.

Implikacje tych instrukcji są XamlReader takie, że projekt aplikacji musi podejmować decyzje o zaufaniu dotyczące kodu XAML, który decydujesz 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 kod zaufania częściowego. 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ń internetowych, zgłaszany jest wyjątek analizy XAML. W obszarze XBAP i innych przypadków, które są częściowo zaufane na poziomie platformy, gdzie XamlReader jest częścią wykonywania, uzyskujesz takie samo zachowanie wyjątku, jak w przypadku jawnych wywołań zaufania częściowego.

WPF XAML, czytniki XAML/pisarze 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ęzykowe nie są obsługiwane w przypadku języka XAML, który musi być skompilowany znaczników (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ólnej obsłudze, które opierają się na dostępie do wewnętrznych WPF. Na przykład sposób implementowania właściwości zależności przez WPF zależy od wewnętrznych technik efektywnego wyszukiwania składowych typów. Dostęp do tych wewnętrznych jest włączony przez interfejsy API odczytu i pisania kodu XAML udostępniane w XamlWriter przestrzeni nazw i XamlReader zestawie System.Windows.Markup PresentationFramework. Jednak czytniki XAML niższego poziomu i pisarze XAML z zestawu System.Xaml (klasy oparte na System.Xaml.XamlReader, System.Xaml.XamlWriter) nie mają dostępu do wewnętrznych WPF. Brak zależności od pliku System.Xaml do żadnego zestawu specyficznego dla platformy WPF. Bez dostępu do wewnętrznych WPF czytniki System.Xaml i pisarze nie mogą poprawnie załadować ani zapisać wszystkich typów WPF lub typów opartych na typach WPF. W szczególności czytniki System.Xaml i autorzy nie rozumieją pojęć, takich jak właściwość zależności WPF zaplecza magazynu właściwości, 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 wybrać:

  • Jeśli ładujesz typy WPF i/lub używasz języka XAML w formularzu BAML w dowolny sposób, użyj czytników XAML PresentationFramework i pisarzy XAML.

  • Jeśli nie korzystasz z żadnych typów WPF lub formy BAML XAML i nie używasz czytnika XAML innej technologii lub implementacji modułu zapisywania XAML ze względów specyficznych dla tej struktury, użyj czytników XAML i pisarzy XAML systemu.XAml.

Implementacja zaplecza 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 .NET Framework 3.0 i .NET Framework 3.5.

Jeśli celujesz .NET Framework 4, zewnętrzny interfejs API jest taki sam, ale części implementacji są oparte na .NET Framework 4 ogólnej implementacji XAML w zestawie System.Xaml, co poprawia wiele technicznych i raportowania aspektów analizowania XAML. Określanie wartości docelowej .NET Framework 4 wiąże się z tym, że system.Xaml jest odwołaniem, a szczegóły implementacji, takie jak zgłoszone wyjątki, mogą pochodzić z zdefiniowanych typów System.Xaml.

Konstruktory

XamlReader()

Inicjuje nowe wystąpienie klasy XamlReader.

Metody

CancelAsync()

Przerywa bieżącą operację asynchronicznego ładowania, jeśli istnieje oczekująca operacja ładowania asynchronicznego.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
GetWpfSchemaContext()

XamlSchemaContext Zwraca obiekt reprezentujący ustawienia kontekstu schematu WPF dla elementu XamlReader.

Load(Stream)

Odczytuje dane wejściowe XAML w określonej kodzie Stream i zwraca Object element, który jest katalogiem głównym odpowiedniego drzewa obiektów.

Load(Stream, Boolean)

Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego składnika 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, ParserContext, Boolean)

Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego składnika zapisywania obiektów XAML.

Load(XamlReader)

Odczytuje dane wejściowe XAML za pośrednictwem podanego XamlReader obiektu i zwraca obiekt, który jest katalogiem głównym odpowiedniego drzewa obiektów.

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.

Load(XmlReader, Boolean)

Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego składnika zapisywania obiektów XAML.

LoadAsync(Stream)

Odczytuje dane wejściowe XAML w określonej kodzie Stream i zwraca katalog główny 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 składnika 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, ParserContext, Boolean)

Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego składnika 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.

LoadAsync(XmlReader, Boolean)

Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego składnika zapisywania obiektów XAML.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
Parse(String)

Odczytuje dane wejściowe XAML w określonym ciągu tekstowym i zwraca obiekt odpowiadający katalogowi głównemu określonego znacznika.

Parse(String, Boolean)

Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego składnika zapisywania obiektów XAML.

Parse(String, ParserContext)

Odczytuje znacznikI XAML w określonym ciągu tekstowym (przy użyciu określonej ParserContext) i zwraca obiekt odpowiadający katalogowi głównemu określonego znaczników.

Parse(String, ParserContext, Boolean)

Odczytuje dane wejściowe XAML i tworzy graf obiektu przy użyciu domyślnego czytnika XAML WPF i skojarzonego składnika zapisywania obiektów XAML.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Zdarzenia

LoadCompleted

Występuje po zakończeniu operacji ładowania asynchronicznego.

Dotyczy

Zobacz też