0

この単純なコードを使用して、いくつかの Xaml をシリアル化/逆シリアル化しようとしています。

object clone;
using ( var stream = new MemoryStream() )
{
  System.Windows.Markup.XamlWriter.Save( myStackPanel, stream );
  stream.Seek( 0, SeekOrigin.Begin );
  clone = System.Windows.Markup.XamlReader.Load( stream );
}

実際の Xaml は既に UI にレンダリングされているため、適切です。完全に有効な StackPanel を逆シリアル化しようとすると、XamlParseException がスローされます。

「タイプ 'System.Windows.ResourceDictionary' のディクショナリに値を追加すると、例外がスローされました。」

内部例外メッセージは次のとおりです。

「アイテムは既に追加されています。辞書のキー: 'フィールド' 追加中のキー: 'フィールド'」

シリアル化された Xaml を調べると、重複するリソースはありません。x:Key="Field" を持つ単一の Style 要素があります。

4

1 に答える 1

0

これは既知のバグのインスタンスのようです。

XamlReader.Load が、myStackPanel で定義する必要がある既存の ResourceDictionary にキーを追加しようとしていると思われます。Key でリソースが定義されていない回避策がある可能性があります。たとえば、リソースを上位のリソース ディクショナリに配置することもできます。

于 2013-05-30T20:01:19.233 に答える