سؤال

كيف يمكنني أن أفعل هذا؟

حاولت استخدام TypeConverter، ولكن الشيء الوحيد الذي كنت أفكر فيه هو إنشاء ملف XML للأنواع، وهو ما لا يفي بالغرض.سوف تفلت محولات TypeConverters في تسلسل xaml من ملف XML وتتعامل معه كنص عادي.محولات القيمة ليست أفضل بكثير.

الآن، أنا أنتقل إلى ISupportInitialize وسأقوم بالرمي إذا تم إجراء تغييرات بعد التهيئة، لكنني كنت أرغب في المسار الثابت...


مثال على النوع الذي أرغب في إجراء تسلسل له:

public struct Foo
{
  public string Bar {get;private set;}
  public Foo(string bar) : this()
  {
    Bar = bar;
  }
}

والرمز

var foo = new Foo("lol");
var serializedFoo = XamlWriter.Save(foo);
هل كانت مفيدة؟

المحلول

عذرا، لا يمكنك استخدام التسلسل العادي مع الأشياء الثابتة في XAML 2006.

ومع XAML 2009، والتي تدعم منشئات وأساليب المصنع، يجب أن تكون قادرا على acomplish هدفك. مجرد حذر من أن يكون، WPF 4 لن يكون باستخدام XAML 2009.

نصائح أخرى

دوه!لقد أخطأت في قراءة هذا السؤال تماما..
=================================

حاول استخدام ملحق الترميز لإنشاء البنية غير القابلة للتغيير:

public class FooExtension : MarkupExtension
{
  public string Bar {get; set;}

  public ImgPathExtension(string bar)
  {
    this.Bar = bar;
  }

  public override object ProvideValue(IServiceProvider serviceProvider)
  {
    var foo = new Foo(this.Bar);
    return foo;
  }
}

الآن، يمكنك استخدامه في XAML الخاص بك مع بناء جملة الامتداد:{ext:فو بار = "لول"}

ما عليك سوى استخدامه بنفس الطريقة التي تستخدم بها أي MarkupExtension آخر، مثل Binding وDynamicsResource وما إلى ذلك.

يرى هذا الرابط إذا كنت بحاجة إلى مزيد من التفاصيل.

هث،

تشارلز

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top