Bagikan melalui


Batasan Serialisasi XamlWriter.Save

API Save dapat digunakan untuk menserialisasikan konten aplikasi Windows Presentation Foundation (WPF) sebagai file Extensible Application Markup Language (XAML). Namun, ada beberapa batasan penting dalam apa yang diserialisasikan. Batasan ini dan beberapa pertimbangan umum didokumenkan dalam topik ini.

Representasi Run-Time, Bukan Design-Time

Filosofi dasar dari apa yang diserialisasikan oleh panggilan Save adalah bahwa hasilnya akan menjadi representasi objek yang diserialisasikan, pada run-time. Banyak properti waktu desain dari file XAML asli mungkin sudah dioptimalkan atau hilang pada saat XAML dimuat sebagai objek dalam memori, dan tidak dipertahankan saat Anda memanggil Save untuk melakukan serialisasi. Hasil yang diserialisasikan adalah representasi efektif dari pohon logis aplikasi yang dibangun, tetapi belum tentu dari XAML asli yang memproduksinya. Masalah ini membuatnya sangat sulit untuk menggunakan Save serialisasi sebagai bagian dari permukaan desain XAML yang luas.

Serialisasi Mandiri

Output serial mandiri Save ; semua yang diserialisasikan terkandung di dalam satu halaman XAML, dengan satu elemen akar, dan tidak ada referensi eksternal selain URI. Misalnya, jika halaman Anda mereferensikan sumber daya dari sumber daya aplikasi, ini akan muncul seolah-olah itu adalah komponen halaman yang diserialisasikan.

Referensi Ekstensi Didereferensikan

Referensi umum ke objek yang dibuat oleh berbagai format ekstensi markup, seperti StaticResource atau Binding, akan didereferensikan oleh proses serialisasi. Ini sudah didereferensikan pada saat objek dalam memori dibuat oleh runtime aplikasi, dan Save logika tidak mengunjungi kembali XAML asli untuk memulihkan referensi tersebut ke output yang diserialisasikan. Ini berpotensi membekukan nilai yang diperoleh databound atau sumber daya menjadi nilai yang terakhir digunakan oleh representasi run-time, dengan hanya kemampuan terbatas atau tidak langsung untuk membedakan nilai tersebut dari nilai lain yang ditetapkan secara lokal. Gambar juga diserialisasikan sebagai referensi objek ke gambar seperti yang ada dalam proyek, bukan sebagai referensi sumber asli, kehilangan nama file atau URI apa pun yang awalnya dirujuk. Bahkan sumber daya yang dideklarasikan dalam halaman yang sama terlihat diserialisasikan ke titik di mana sumber daya tersebut direferensikan, daripada dipertahankan sebagai kunci koleksi sumber daya.

Penanganan Peristiwa Tidak Dipertahankan

Ketika penanganan aktivitas yang ditambahkan melalui XAML diserialisasikan, mereka tidak dipertahankan. XAML tanpa code-behind (dan juga tanpa mekanisme x:Code terkait) tidak memiliki cara untuk membuat serialisasi logika prosedural runtime. Karena serialisasi mandiri dan terbatas pada pohon logis, tidak ada fasilitas untuk menyimpan penanganan peristiwa. Akibatnya, atribut penanganan aktivitas, baik atribut itu sendiri maupun nilai string yang menamai handler, dihapus dari XAML output.

Skenario Realistis untuk Penggunaan XAMLWriter.Save

Meskipun batasan yang tercantum di sini cukup substansial, masih ada beberapa skenario yang tepat untuk digunakan Save untuk serialisasi.

  • Output vektor atau grafis: Output area yang dirender dapat digunakan untuk mereproduksi vektor atau grafik yang sama saat dimuat ulang.

  • Dokumen teks dan alur yang kaya: Pemformatan teks dan semua elemen dan penahanan elemen di dalamnya dipertahankan dalam output. Ini dapat berguna untuk mekanisme yang memperkirakan fungsionalitas clipboard.

  • Mempertahankan data objek bisnis: Jika Anda telah menyimpan data dalam elemen kustom, seperti data XML, selama objek bisnis Anda mengikuti aturan XAML dasar seperti menyediakan konstruktor kustom dan konversi untuk nilai properti referensi demi referensi, objek bisnis ini dapat diabadikan melalui serialisasi.