2011-02-11 39 views
2

在.NET 4.0中对XAML序列化堆栈进行了相当多的更改。其中一个变化是,当你序列化一个UserControl时,你不仅得到了控制本身,而且还得到了它的所有孩子。将用户控件序列化为xaml,但不是子项?

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

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