XamlWriter.Save Serileştirme Sınırlamaları
API Save, 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, neyin serileştirilip serileştirilmediğine dair 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ı (Run-Time), Design-Time Gösterimi Değildir
Save çağrısıyla seri hale getirilen şeyin temel felsefesi, sonucun seri hale getirilen nesnenin çalışma zamanında bir gösterimi olmasıdır. Özgün XAML dosyasının birçok tasarım zamanı özelliği, XAML bellek içi nesneler olarak yüklendiğinde zaten optimize edilmiş olabilir veya kaybolmuş olabilir ve serileştirmek için Save çağırdığınızda korunmamaktadır. 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, kapsamlı bir XAML tasarım yüzeyinin parçası olarak Save serileştirmenin kullanılmasını son derece zor hale getirir.
Serileştirme Self-Contained'dır
Save'nin serileştirilmiş çıkışı kendine yeterlidir; serileştirilen her şey, URI'ler dışında dış başvuru içermeyen, tek bir kök öğesiyle 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ı Referansları Kaldırılıyor
StaticResource
veya Binding
gibi çeşitli işaretleme uzantısı biçimlerini içeren nesnelere yönelik yaygın başvurular, serileştirme işlemi tarafından kaldırılacaktır. Bu referanslar, uygulamanın çalışma zamanı tarafından bellek içi nesneler oluşturulduğunda zaten başvuruları kaldırılmıştır ve Save mantığı, serileştirilen çıktıya bu tür başvuruları geri yüklemek için orijinal XAML'e geri dönmez. Bu, veriye bağlı veya kaynaktan elde edilen herhangi bir değeri, çalışma zamanı temsili tarafından son kullanılan değer olacak şekilde dondurabilir ve bu değeri yerel olarak ayarlanan diğer değerlerden ayırt etmek için yalnızca sınırlı veya dolaylı bir yetenek 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 Korunmuyor
Seri hale getirildiğinde, XAML aracılığıyla eklenen olay işleyicileri korunamıyor. 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 Save kullanmak 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, pano işlevselliğine benzer bir mekanizma 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.
.NET Desktop feedback