-2

我怎样才能做到这一点?

尝试使用 TypeConverter,但我唯一能想到的就是为类型构造 XML,这并没有完全削减它。xaml 序列化中的 TypeConverters 将转义 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);
4

2 回答 2

3

抱歉,您不能在 XAML 2006 中对不可变对象使用正常的序列化。

使用支持构造函数和工厂方法的 XAML 2009,您应该能够实现您的目标。请注意,WPF 4 不会使用 XAML 2009。

于 2009-12-03T07:51:46.990 回答
1

嗬!我完全误读了这个问题...
==================================

尝试使用标记扩展来创建您的不可变结构:

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:Foo Bar="lol"}

只需像使用任何其他 MarkupExtension 一样使用它,例如 Binding、DynamicResource 等。

如果您需要更多详细信息,请参阅此链接。

高温下,

查尔斯

于 2009-12-07T21:13:51.673 回答