Bagikan melalui


Kelas XAMLServices dan pembacaan atau penulisan XAML dasar

XamlServices adalah kelas yang disediakan oleh .NET yang dapat digunakan untuk mengatasi skenario XAML yang tidak memerlukan akses khusus ke aliran simpul XAML atau ke informasi sistem jenis XAML yang diperoleh dari simpul tersebut. XamlServices API dapat diringkas sebagai berikut: Load atau Parse untuk mendukung jalur beban XAML, Save untuk mendukung jalur penyimpanan XAML, dan Transform untuk menyediakan teknik yang menggabungkan jalur beban dan menyimpan jalur. Transform dapat digunakan untuk mengubah dari satu skema XAML ke skema lainnya. Topik ini merangkum masing-masing klasifikasi API ini dan menjelaskan perbedaan antara kelebihan metode tertentu.

Muat

Berbagai kelebihan beban Load mengimplementasikan logika lengkap untuk jalur beban. Jalur beban menggunakan XAML dalam beberapa bentuk dan menghasilkan aliran simpul XAML. Sebagian besar jalur beban ini menggunakan XAML dalam formulir file teks XML yang dikodekan. Namun, Anda juga dapat memuat aliran umum, atau Anda dapat memuat sumber XAML yang telah dimuat sebelumnya yang sudah terkandung dalam implementasi yang berbeda XamlReader .

Kelebihan beban paling sederhana untuk sebagian besar skenario adalah Load(String). Kelebihan beban ini memiliki fileName parameter yang hanyalah nama file teks yang berisi XAML yang akan dimuat. Ini sesuai untuk skenario aplikasi seperti aplikasi kepercayaan penuh yang sebelumnya telah diserialisasikan status atau data ke komputer lokal. Ini juga berguna untuk kerangka kerja di mana Anda menentukan model aplikasi dan ingin memuat salah satu file standar yang menentukan perilaku aplikasi, memulai UI, atau kemampuan lain yang ditentukan kerangka kerja yang menggunakan XAML.

Load(Stream) memiliki skenario serupa. Kelebihan beban ini mungkin berguna jika Anda meminta pengguna memilih file untuk dimuat, karena Stream merupakan output yang sering dari API lain System.IO yang dapat mengakses sistem file. Atau Anda dapat mengakses sumber XAML melalui unduhan asinkron atau teknik jaringan lain yang juga menyediakan aliran. (Memuat dari aliran atau sumber yang dipilih pengguna mungkin memiliki implikasi keamanan. Untuk informasi selengkapnya, lihat Pertimbangan Keamanan XAML.)

Load(TextReader) dan Load(XmlReader) adalah kelebihan beban yang mengandalkan pembaca format dari versi .NET sebelumnya. Untuk menggunakan kelebihan beban ini, Anda seharusnya sudah membuat instans pembaca dan menggunakan API-nya Create untuk memuat XAML dalam bentuk yang relevan (teks atau XML). Jika Anda telah memindahkan penunjuk rekaman di pembaca lain atau melakukan operasi lain dengan mereka, ini tidak penting. Logika jalur beban dari Load selalu memproses seluruh input XAML dari root down. Skenario berikut mungkin menjamin penggunaan kelebihan beban ini:

  • Permukaan desain tempat Anda menyediakan kemampuan pengeditan XAML sederhana dari editor teks khusus XML yang ada.

  • Varian skenario inti System.IO , di mana Anda menggunakan pembaca khusus untuk membuka file atau aliran. Logika Anda melakukan pemeriksaan rudimenter atau pemrosesan konten sebelum mencoba memuat sebagai XAML.

Anda dapat memuat file atau streaming, atau Anda dapat memuat XmlReader, TextReader, atau XamlReader yang membungkus input XAML Anda dengan memuat dengan API pembaca.

Secara internal, masing-masing kelebihan beban sebelumnya pada akhirnya Load(XmlReader), dan yang diteruskan XmlReader digunakan untuk membuat baru XamlXmlReader.

Tanda Load tangan yang menyediakan skenario yang lebih canggih adalah Load(XamlReader). Anda dapat menggunakan tanda tangan ini untuk salah satu kasus berikut:

  • Anda telah menentukan implementasi Anda sendiri dari XamlReader.

  • Anda perlu menentukan pengaturan untuk XamlReader itu bervariasi dari pengaturan default.

Contoh pengaturan non-default:

AllowProtectedMembersOnRoot
BaseUri
IgnoreUidsOnPropertyElements
LocalAssembly
ValuesMustBeString.

Pembaca default untuk XamlServices adalah XamlXmlReader. Jika Anda menyediakan pengaturan Anda sendiri XamlXmlReader , berikut ini adalah properti untuk mengatur non-default XamlXmlReaderSettings:

CloseInput
SkipXmlCompatibilityProcessing
XmlLang
XmlSpacePreserve

Pilah

Parse seperti Load karena ini adalah API jalur beban yang membuat aliran simpul XAML dari input XAML. Namun, dalam hal ini, input XAML disediakan langsung sebagai string yang berisi semua XAML yang akan dimuat. Parse adalah pendekatan ringan yang lebih sesuai untuk skenario aplikasi daripada skenario kerangka kerja. Untuk informasi selengkapnya, lihat Parse . Parse hanya panggilan yang dibungkus Load(XmlReader)StringReader yang melibatkan internal.

Simpan

Berbagai kelebihan beban Save mengimplementasikan jalur simpan. Save Semua metode mengambil grafik objek sebagai input dan menghasilkan output sebagai aliran, file, atau XmlWriter/TextWriter instans.

Objek input diharapkan menjadi objek akar dari beberapa representasi objek. Ini mungkin akar tunggal objek bisnis, akar pohon objek untuk halaman dalam skenario UI, permukaan pengeditan yang berfungsi dari alat desain, atau konsep objek akar lainnya yang sesuai untuk skenario.

Dalam banyak skenario, pohon objek yang Anda simpan terkait dengan operasi asli yang memuat XAML baik dengan Load atau dengan API lain yang diimplementasikan oleh model kerangka kerja/aplikasi. Mungkin ada perbedaan yang diambil di pohon objek yang disebabkan oleh perubahan status, perubahan di mana aplikasi Anda mengambil pengaturan runtime dari pengguna, mengubah XAML karena aplikasi Anda adalah permukaan desain XAML, dll. Dengan atau tanpa perubahan, konsep pemuatan XAML pertama dari markup dan kemudian menyimpannya lagi dan membandingkan dua bentuk markup XAML terkadang disebut sebagai representasi pulang-pergi dari XAML.

Tantangan dengan menyimpan dan menserialisasikan objek kompleks yang diatur dalam bentuk markup adalah dalam mencapai keseimbangan antara representasi penuh tanpa kehilangan informasi, versus verbositas yang membuat XAML kurang dapat dibaca manusia. Selain itu, pelanggan yang berbeda untuk XAML mungkin memiliki definisi atau harapan yang berbeda tentang bagaimana saldo tersebut harus ditetapkan. Save API mewakili satu definisi dari keseimbangan tersebut. Save API menggunakan konteks skema XAML yang tersedia dan karakteristik berbasis CLR default dari XamlType, , XamlMemberdan konsep sistem intrinsik XAML dan jenis XAML lainnya untuk menentukan di mana konstruksi aliran simpul XAML tertentu dapat dioptimalkan ketika disimpan kembali ke markup. Misalnya, XamlServices jalur penyimpanan dapat menggunakan konteks skema XAML default berbasis CLR untuk mengatasi XamlType objek, dapat menentukan XamlType.ContentProperty, lalu dapat menghilangkan tag elemen properti saat mereka menulis properti ke konten XAML objek.

Transformasi

Transform mengonversi atau mengubah XAML dengan menautkan jalur beban dan jalur penyimpanan sebagai operasi tunggal. Konteks skema yang berbeda atau sistem jenis dukungan yang berbeda dapat digunakan untuk XamlReader dan XamlWriter, itulah yang memengaruhi bagaimana XAML yang dihasilkan diubah. Ini berfungsi dengan baik untuk operasi transformasi luas.

Untuk operasi yang mengandalkan pemeriksaan setiap simpul dalam aliran simpul XAML, Anda biasanya tidak menggunakan Transform. Sebagai gantinya, Anda perlu menentukan seri operasi jalur penyimpanan jalur beban Anda sendiri dan menyuntikkan logika Anda sendiri. Di salah satu jalur, gunakan pasangan pembaca XAML/penulis XAML di sekitar perulangan simpul Anda sendiri. Misalnya, muat XAML awal menggunakan XamlXmlReader dan masuk ke simpul dengan panggilan berturut-turut Read . Beroperasi pada tingkat aliran simpul XAML, Anda sekarang dapat menyesuaikan simpul individual (jenis, anggota, simpul lain) untuk menerapkan transformasi, atau membiarkan simpul apa adanya. Kemudian Anda mengirim simpul dan seterusnya ke API yang relevan Write dari dan XamlObjectWriter menuliskan objek. Untuk informasi selengkapnya, lihat Memahami Struktur dan Konsep Aliran Simpul XAML.

Baca juga