Share via


XamlReader Kelas

Definisi

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

public ref class XamlReader
public class XamlReader
type XamlReader = class
Public Class XamlReader
Warisan
XamlReader

Contoh

Contoh berikut mengonversi menjadi Button string menggunakan XamlWriter kelas . String kemudian dimuat kembali ke dalam Button menggunakan metode statis Load pada XamlReader kelas .

// 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)

Keterangan

Metode sinkron Load bersifat statis, tetapi metode asinkron LoadAsync tidak statis dan memerlukan instans XamlReader kelas untuk digunakan.

Output metode Load adalah objek tunggal, yang mewakili objek akar dari pohon objek atau grafik objek yang dibuat. Grafik objek yang dibuat oleh XamlReader biasanya ditambahkan ke pohon objek yang ada dari aplikasi WPF pada durasi. Jika tidak, grafik objek baru dianggap terputus untuk tujuan model aplikasi WPF. Ini berarti bahwa ia tidak merender, dan tidak dapat diakses menggunakan salah satu teknik pohon objek seperti yang diterapkan ke pohon objek utama aplikasi WPF (misalnya, API FindName, LogicalTreeHelper, VisualTreeHelper). Untuk informasi selengkapnya tentang konsep pohon objek, lihat Pohon di WPF.

XamlReader mendukung skenario utama berikut:

  • Kloning/pabrik objek: Tanpa mekanisme tambahan, jenis referensi umumnya tidak dapat disertakan dalam lebih dari satu posisi di pohon objek WPF. (Contoh mekanisme tambahan yang menawarkan dukungan untuk berbagi atau penggunaan kembali di WPF termasuk objek yang didasarkan pada Freezable, atau dukungan untuk objek yang umumnya dapat dibagikan seperti Brush yang direferensikan sebagai item dari ResourceDictionary.) Salah satu cara untuk mengkloning objek yang sudah ada di pohon objek adalah dengan menserialisasikan objek menggunakan XamlWriter.Save. Anda kemudian menggunakan string berseri sebagai input untuk panggilan ke Load, dengan aliran atau XmlReader sebagai perantara.

  • Membuat objek berdasarkan informasi just-in-time: Seringkali ada cara lain untuk memiliki pengikatan terlambat atau input yang disediakan pengguna mengubah status objek yang ada. Misalnya, Anda dapat menggunakan nilai yang sama untuk mengatur lebih dari satu properti, atau menggunakan pengikatan data. Tetapi jika Anda memiliki skenario di mana bahkan jenis objek yang akan dibuat hanya dapat ditentukan pada waktu proses atau dengan interaksi pengguna, maka membuat objek seperti itu dengan membangun string untuk Load input sering kali merupakan teknik yang berguna.

  • Menggunakan teknik sumber daya yang ada: Jenis ini Stream sering digunakan dalam kerangka kerja atau teknologi lain untuk mentransfer data atau objek di seluruh batas aplikasi atau untuk situasi serupa. Anda kemudian dapat menggunakan Stream teknik untuk menyimpan atau mendapatkan data berformat XAML yang akhirnya Anda gunakan untuk membuat objek sebagai bagian dari aplikasi Anda.

  • Dokumen tetap: Aplikasi Anda mungkin memuat dokumen XPS lokal atau yang diunduh untuk dimasukkan dalam pohon objek aplikasi WPF dan UI.

Catatan

Dokumentasi ini terkadang menjelaskan grafik objek, dibandingkan dengan pohon objek. Hubungan induk-anak yang ketat tidak selalu ada dalam hubungan objek run time dari aplikasi WPF run time, sehingga grafik objek adalah terminologi yang lebih banyak diterapkan. Namun, karena WPF juga mencakup dua API konseptualisasi pohon yang berbeda (LogicalTreeHelper, VisualTreeHelper) metafora pohon masih berlaku cukup untuk sebagian besar kasus dunia nyata di WPF. Namun, dari perspektif bahasa XAML, grafik objek sering kali merupakan cara terbaik untuk memikirkan bagaimana objek dibuat dari XAML, karena bahasa XAML itu sendiri tidak selalu menentukan metodologi kelas pembantu yang membawa hubungan lebih ke dalam struktur pohon lagi.

Keamanan Akses Kode, XAML Longgar, dan XamlReader

XAML adalah bahasa pemrogram markup yang secara langsung mewakili pembuatan dan eksekusi objek. Oleh karena itu, elemen yang dibuat di XAML memiliki kemampuan yang sama untuk berinteraksi dengan sumber daya sistem (akses jaringan, IO sistem file, misalnya) seperti kode yang dihasilkan yang setara.

WPF mendukung kerangka kerja keamanan .NET Code Access Security (CAS). Ini berarti bahwa konten WPF yang berjalan di zona internet telah mengurangi izin eksekusi. "Loose XAML" (halaman XAML yang tidak dikompilasi yang ditafsirkan pada waktu pemuatan oleh penampil XAML) dan aplikasi browser XAML (XBAP) biasanya dijalankan di zona internet ini dan menggunakan set izin yang sama. Namun, XAML yang dimuat ke aplikasi yang sepenuhnya tepercaya memiliki akses yang sama ke sumber daya sistem seperti yang dilakukan aplikasi hosting. Untuk informasi selengkapnya, lihat Keamanan Kepercayaan Parsial WPF.

Implikasi dari pernyataan XamlReader ini adalah bahwa desain aplikasi Anda harus membuat keputusan kepercayaan tentang XAML yang Anda putuskan untuk dimuat. Jika Anda memuat XAML yang tidak tepercaya, pertimbangkan untuk menerapkan teknik sandboxing Anda sendiri untuk cara Anda memuat grafik objek yang dihasilkan.

XamlReader juga dapat dipanggil dengan kode kepercayaan parsial. Dalam hal ini, zona keamanan Internet diterapkan untuk keamanan akses kode. Jika ada sesuatu dalam XAML yang dimuat tidak valid di bawah zona keamanan Internet, pengecualian penguraian XAML akan dilemparkan. Di bawah XBAP dan kasus lain yang merupakan kepercayaan parsial di tingkat platform, di mana XamlReader merupakan bagian dari eksekusi, Anda mendapatkan perilaku pengecualian yang sama seperti dengan panggilan kepercayaan parsial eksplisit.

WPF XAML, Pembaca/Penulis XAML, dan Penerapan Versi Bahasa XAML

XAML2009 mencakup fitur bahasa seperti x:Reference dan x:FactoryMethod. Anda dapat menggunakan tanda tangan Load atau Parse untuk memuat XAML yang menggunakan fitur-fitur ini. Namun, fitur bahasa tersebut tidak didukung untuk XAML yang perlu dikompilasi markup (seperti XAML untuk tindakan Build halaman dalam aplikasi WPF, atau XAML apa pun yang melibatkan tugas kompilasi markup dalam tindakan build).

Jenis WPF dan teknologi WPF secara umum mendukung konsep yang mengandalkan akses ke internal WPF. Misalnya, bagaimana WPF mengimplementasikan properti dependensi bergantung pada teknik internal untuk pencarian jenis anggota yang efisien. Akses ke internal ini diaktifkan oleh API pembacaan dan penulisan XAML yang disediakan di XamlWriter dan XamlReader dari System.Windows.Markup namespace layanan dan rakitan PresentationFramework. Namun, pembaca XAML tingkat bawah dan penulis XAML dari rakitan System.Xaml (kelas berdasarkan System.Xaml.XamlReader, System.Xaml.XamlWriter) tidak memiliki akses ke internal WPF. Tidak ada dependensi dari System.Xaml ke rakitan khusus WPF apa pun. Tanpa akses ke internal WPF, pembaca dan penulis System.Xaml tidak dapat memuat atau menyimpan semua jenis WPF dengan benar, atau jenis berdasarkan jenis WPF. Secara khusus, pembaca dan penulis System.Xaml tidak memahami konsep seperti penyimpanan properti pendukung dependensi WPF, atau semua spesifikasi bagaimana WPF menggunakan gaya, kamus sumber daya, dan templat. Oleh karena itu Anda memiliki pilihan untuk membuat:

  • Jika Anda memuat jenis WPF, dan/atau Anda menggunakan XAML dalam bentuk BAML dengan cara apa pun, gunakan pembaca PresentationFramework XAML dan penulis XAML.

  • Jika Anda tidak mengandalkan jenis WPF atau bentuk BAML XAML, dan tidak menggunakan implementasi pembaca XAML atau penulis XAML teknologi tertentu lainnya karena alasan khusus untuk kerangka kerja tersebut, gunakan pembaca XAML System.Xaml dan penulis XAML.

Implementasi Backing System.Xaml di .NET 4

XamlReader adalah permukaan API yang dapat dipanggil untuk pengurai XAML tingkat kerangka kerja WPF. Parser XAML yang mendasari yang sama juga melakukan pemuatan dan penguraian XAML run-time untuk aplikasi WPF yang menargetkan .NET Framework 3.0 dan .NET Framework 3.5.

Jika Anda menargetkan .NET Framework 4, API eksternal sama, tetapi bagian dari implementasi dibangun pada implementasi XAML umum .NET Framework 4 di rakitan System.Xaml, yang meningkatkan banyak aspek teknis dan pelaporan penguraian XAML. Menargetkan .NET Framework 4 harus diperlukan termasuk System.Xaml sebagai referensi, dan detail implementasi seperti pengecualian yang dilaporkan mungkin berasal dari jenis yang ditentukan System.Xaml.

Konstruktor

XamlReader()

Menginisialisasi instans baru kelas XamlReader.

Metode

CancelAsync()

Membatalkan operasi beban asinkron saat ini, jika ada operasi beban asinkron yang tertunda.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
GetWpfSchemaContext()

Mengembalikan XamlSchemaContext objek yang mewakili pengaturan konteks skema WPF untuk XamlReader.

Load(Stream)

Membaca input XAML dalam yang ditentukan Stream dan mengembalikan Object yang merupakan akar pohon objek yang sesuai.

Load(Stream, Boolean)

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

Load(Stream, ParserContext)

Membaca input XAML dalam yang ditentukan Stream dan mengembalikan objek yang merupakan akar pohon objek yang sesuai.

Load(Stream, ParserContext, Boolean)

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

Load(XamlReader)

Membaca input XAML melalui yang disediakan XamlReader dan mengembalikan objek yang merupakan akar pohon objek yang sesuai.

Load(XmlReader)

Membaca input XAML dalam yang ditentukan XmlReader dan mengembalikan objek yang merupakan akar pohon objek yang sesuai.

Load(XmlReader, Boolean)

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

LoadAsync(Stream)

Membaca input XAML dalam yang ditentukan Stream dan mengembalikan akar pohon objek yang sesuai.

LoadAsync(Stream, Boolean)

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

LoadAsync(Stream, ParserContext)

Membaca input XAML dalam yang ditentukan Stream dan mengembalikan akar pohon objek yang sesuai.

LoadAsync(Stream, ParserContext, Boolean)

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

LoadAsync(XmlReader)

Membaca input XAML dalam yang ditentukan XmlReader dan mengembalikan akar pohon objek yang sesuai.

LoadAsync(XmlReader, Boolean)

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
Parse(String)

Membaca input XAML dalam string teks yang ditentukan dan mengembalikan objek yang sesuai dengan akar markup yang ditentukan.

Parse(String, Boolean)

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

Parse(String, ParserContext)

Membaca markup XAML dalam string teks yang ditentukan (menggunakan yang ditentukan ParserContext) dan mengembalikan objek yang sesuai dengan akar markup yang ditentukan.

Parse(String, ParserContext, Boolean)

Membaca input XAML dan membuat grafik objek, menggunakan pembaca XAML default WPF dan penulis objek XAML terkait.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Acara

LoadCompleted

Terjadi ketika operasi beban asinkron selesai.

Berlaku untuk

Lihat juga