قيود إنشاء تسلسل إلى ملف XamlWriter.Save

يمكن استخدام APISave لتسلسل محتويات Windows Presentation Foundation (WPF) الخاصة بالتطبيق كملف ‏Extensible Application Markup Language (XAML)‎‏. ومع ذلك، توجد بعض القيود المهمة حول ما يتم جعله متسلسلاً. يتم توثيق هذه الحدود وبعض الاعتبارات العامة في هذا الموضوع.

يشتمل هذا الموضوع على الأقسام التالية.

  • وقت التشغيل وليس تمثيل وقت التصميم
  • التسلسل هو محتوى ذاتياً
  • المراجع الملحقة يتم الغاء مرجعيتها
  • يتم عدم الاحتفاظ معالجة الحدث
  • سيناريوهات واقعية لاستخدام XAMLWriter.Save

وقت التشغيل وليس تمثيل وقت التصميم

الفلسفة الأساسية من وراء ما يتم تسلسله بواسطة استدعاء Save هو أن النتيجة ستكون تمثيل كائن يتم تسلسله، عند وقت التشغيل. العديد من خصائص وقت التصميم الأصلي لملف XAML قد تكون بالفعل محسنة أو فقدت قبل الوقت الذي تم فيه تحميل XAML ككائنات في الذاكرة و لا يتم الاحتفاظ بها عند استدعاء Save للتسلسل. تكون النتيجة المتسلسلة تمثيل فعال للشجرة المنطقية المكونة للتطبيق ولكن ليس بالضرورة من XAMLالأصلية التي انتجتها. هذه المشكلات تجعل استخدام تسلسل Save غاية الصعوبة كجزء من سطح التصميم XAML.

التسلسل هو محتوى ذاتياً

الإخراج المتسلسل لـ Save هو مُضمن; كل شيء يتم تسلسله موجود داخل صفحة مفردة XAML مع عنصر جذر واحد و لا مراجع خارجية أخرى غير معرفات URI. على سبيل المثال، إذا كانت الموارد المرجعية للصفحة الخاصة بك هى من موارد التطبيق سوف تظهر هذه كما لو كانت أحد مكونات الصفحة التى يتم تسلسلها.

المراجع الملحقة يتم الغاء مرجعيتها

المراجع الشائعة للكائنات التي تم إجراؤها بواسطة عدة علامات امتدادات تنسيقات، مثل StaticResource أو Binding ، سوف يتم الغاء مرجعيتها بواسطة عملية إنشاء تسلسل. يتم ألغاء الإشارة بالفعل في الوقت الذي تم إنشاء كائنات في الذاكرة بواسطة وقت تشغيل التطبيق ولا يرجع المنطق Save الى XAML الأصلية لاستعادة مثل هذه المراجع للخرج المتسلسل. هذا يعمل على تجميد أى بينات مرتبطة أو قيمة تم الحصول عليها من مورد لتكون القيمة الأخيرة المستخدمة بواسطة تمثيل وقت التشغيل مع تعيين محدود أو غير مباشر فقط لإمكانية تمييز مثل هذه قيمة من أية قيمة أخرى محلياً. يتم أيضاً إجراء تسلسل للصور كـمراجع لكائنات لصور كما كانت موجودة في المشروع, بدلاً من مراجع المصدر الأصلي مع فقدان أي اسم للملف أو URI تمت الإشارة إلى فى الأصل. حتى الموارد معّرفة فى نفس الصفحة يتم عرضها متسلسلة إلى النقطة حيث يتم الرجوع اليها بدلاً من يتم الاحتفاظ بها كمفتاح لمجموعة الموارد.

يتم عدم الاحتفاظ معالجة الحدث

When حدث handlers that are تمت الإضافة through XAML are serialized, they are not preserved. XAML without تعليمات برمجية-behind (و also without the related x:تعليمات برمجية mechanism) has لا way of serializing وقت التشغيل procedural logic. لأن التسلسل هو مُضمن ومحدود إلى شجرة المنطقية لا توجد أداة لتخزين معالجات الأحداث. ونتيجة لذلك، يتم إزالة سمات معالج الحدث ، كل سمة نفسها وقيمة السلسلة أسماء المعالج، من الخرج XAML.

سيناريوهات واقعية لاستخدام XAMLWriter.Save

بينما القيود المسرودة هنا حقيقية لا تزال هناك عدة سيناريوهات مناسبة لاستخدام اجراء تسلسل Save.

  • خط متجه أو خرج الرسمة: يمكن استخدام خرج المنطقة المخزنة لإعادة إنشاء نفس خط المتجه أو الرسومات عند إعادة التحميل.

  • منسق النص وتدفق المستندات: يتم الاحتفاظ بالنص وعنصر تنسيق وعنصر الاحتواء في الإخراج. قد يكون هذا مفيداً للآليات التقريبية لوظيفة clipboard.

  • العمل مع الاحتفاظ بكائنات البيانات: إذا قمت بتخزين البيانات في عناصر مخصصة مثل بيانات XML كلما كانت كائنات الأعمال الخاصة بك تتبع قواعد XAML مثل توفير المُنشئات المخصصة والتحويل عن الى قيمة الخاصية بالمرجعية يمكن أن تكون قيم هذه الكائنات دائمة خلال عملية تحويل البيانات إلى ملف.