我该怎么做?
尝试使用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);
答案 0 :(得分:3)
抱歉,您无法在XAML 2006中使用普通序列化和不可变对象。
使用支持构造函数和工厂方法的XAML 2009,您应该能够实现目标。请注意,WPF 4将不会使用XAML 2009.
答案 1 :(得分: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等。
如果您需要更多详细信息,请参阅this link。
HTH,
查尔斯