Aracılığıyla paylaş


XamlWriter.Save'in Serileştirme Sınırlamaları

API Save , bir Windows Presentation Foundation (WPF) uygulamasının içeriğini Genişletilebilir Uygulama Biçimlendirme Dili (XAML) dosyası olarak serileştirmek için kullanılabilir. Ancak, tam olarak serileştirilmiş olan bazı önemli sınırlamalar vardır. Bu sınırlamalar ve bazı genel noktalar bu konu başlığında belgelenmiştir.

Çalışma Zamanı, Tasarım Zamanı Gösterimi Değil

çağrısıyla Save seri hale getirilen şeyin temel felsefesi, sonucun çalışma zamanında seri hale getirilen nesnenin bir gösterimi olmasıdır. Özgün XAML dosyasının birçok tasarım zamanı özelliği, XAML'nin bellek içi nesneler olarak yüklendiği zamana göre zaten iyileştirilebilir veya kaybolabilir ve serileştirme çağrısı Save yaptığınızda korunmaz. Serileştirilmiş sonuç, uygulamanın yapılandırılmış mantıksal ağacının etkili bir gösterimidir, ancak bunu üreten özgün XAML'nin olması gerekmez. Bu sorunlar, serileştirmeyi Save kapsamlı bir XAML tasarım yüzeyinin parçası olarak kullanmayı son derece zor hale getirir.

Serileştirme Bağımsızdır

serileştirilmiş çıktısı Save kendi içindedir; seri hale getirilen her şey tek bir kök öğesi olan ve URI'ler dışında dış başvuru içermeyen tek bir XAML sayfasının içinde yer alır. Örneğin, sayfanız uygulama kaynaklarından kaynaklara başvurduysa, bunlar seri hale getirilen sayfanın bir bileşeniymiş gibi görünür.

Uzantı Başvuruları Başvurusu Kaldırılıyor

veya Bindinggibi StaticResource çeşitli işaretleme uzantısı biçimleri tarafından yapılan nesnelere yönelik yaygın başvurular, serileştirme işlemi tarafından başvurulmaz. Bunlar, uygulama çalışma zamanı tarafından bellek içi nesnelerin oluşturulduğu sırada zaten başvurulmamıştır ve Save mantık, serileştirilmiş çıkışa bu tür başvuruları geri yüklemek için özgün XAML'yi yeniden ziyaret etmez. Bu, elde edilen verilerle veya kaynakla elde edilen değerleri, çalışma zamanı gösterimi tarafından son kullanılan değer olacak şekilde dondurarak, bu tür bir değeri yerel olarak ayarlanan diğer değerlerden ayırt etmek için yalnızca sınırlı veya dolaylı bir özellik sağlar. Görüntüler, özgün kaynak başvuruları yerine projede mevcut olan görüntülere nesne başvuruları olarak seri hale getirilir ve başlangıçta başvuruda bulunılan dosya adı veya URI kaybedilir. Aynı sayfa içinde bildirilen kaynaklar bile bir kaynak koleksiyonunun anahtarı olarak korunmak yerine başvuruldukları noktada serileştirilmiş olarak görülür.

Olay İşleme Korunmadı

XAML aracılığıyla eklenen olay işleyicileri seri hale getirildiğinde korunmaz. Arka planda kod içermeyen XAML(ve ayrıca ilgili x:Code mekanizması olmadan) çalışma zamanı yordam mantığını seri hale getirmenin bir yolu yoktur. Serileştirme kendi içinde olduğundan ve mantıksal ağaçla sınırlı olduğundan, olay işleyicilerini depolamak için bir özellik yoktur. Sonuç olarak, hem özniteliğin kendisi hem de işleyiciyi adlandıran dize değeri olan olay işleyici öznitelikleri çıkış XAML'sinden kaldırılır.

XAMLWriter.Save Kullanımı için Gerçekçi Senaryolar

Burada listelenen sınırlamalar oldukça önemli olsa da, serileştirme için kullanmak Save için hala birkaç uygun senaryo vardır.

  • Vektör veya grafik çıktı: İşlenen alanın çıkışı, yeniden yüklendiğinde aynı vektör veya grafikleri yeniden oluşturmak için kullanılabilir.

  • Zengin metin ve akış belgeleri: Metin ve içindeki tüm öğe biçimlendirmesi ve öğe kapsaması çıktıda korunur. Bu, yaklaşık bir pano işlevine sahip mekanizmalar için yararlı olabilir.

  • İş nesnesi verilerini koruma: verileri XML verileri gibi özel öğelerde depoladıysanız, iş nesneleriniz özel oluşturucular sağlama ve başvuru özelliği değerleri için dönüştürme gibi temel XAML kurallarını izlediği sürece, bu iş nesneleri serileştirme yoluyla kalıcı hale getirilebilir.