-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"}

Binding、DynamicResource など、他の MarkupExtension と同じように使用してください。

詳細が必要な場合は、このリンクを参照してください。

HTH、

チャールズ

于 2009-12-07T21:13:51.673 に答える