Сериализация UserControl для xaml, но не его дочерние элементы? - PullRequest
2 голосов
/ 11 февраля 2011

В стек сериализации XAML в .NET 4.0 было внесено довольно много изменений.Одним из изменений является то, что при сериализации UserControl вы получаете не только сам элемент управления, но и все его дочерние элементы.

var sb = new StringBuilder();
var writer = XmlWriter.Create(sb, new XmlWriterSettings
{
    Indent = true,
    ConformanceLevel = ConformanceLevel.Fragment,
    OmitXmlDeclaration = true
});
var mgr = new XamlDesignerSerializationManager(writer);
mgr.XamlWriterMode = XamlWriterMode.Expression;
System.Windows.Markup.XamlWriter.Save(this, mgr);
return sb.ToString();

Вместо получения, например,

<MyUserControl 
    xmlns="clr-namespace:MyNamespace" 
    SomeProperty="Add ten thousand child controls" />

Теперь вы получаете

<MyUserControl 
    xmlns="clr-namespace:MyNamespace" 
    SomeProperty="Add ten thousand child controls">
    <StackPanel xmlns="http://microsoft.com/something/xaml/dude">
          <TextBlock Text="Child Control ONE!"/>
          <TextBlock Text="Child Control TWO!"/>
          <TextBlock Text="Child Control THREE!"/>
          <!--WTMFH?-->
      <TextBlock Text="Child Control TEN FRIGGEN THOUSAND!"/>
    </StackPanel>
</MyUserControl/>

Как я могу вернуть это поведение обратно к исходному методу?

1 Ответ

1 голос
/ 11 февраля 2011

Один из вариантов, который у меня есть, - переопределить ShouldSerializeContent и вернуть false. Все еще ищу лучшие ответы, которые позволят мне указать это вне контроля.

...