将UserControl序列化为xaml,但不是其子代?

时间:2011-02-11 19:03:16

标签: c# wpf serialization user-controls

.NET 4.0中的XAML序列化堆栈发生了很多变化。其中一个变化是,当你序列化一个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 个答案:

答案 0 :(得分:1)

我有一个选项是覆盖ShouldSerializeContent并返回false。仍在寻找更好的答案,这将允许我在控件之外指定它。