none
wpf 用户控件问题 RRS feed

  • 问题

  • 我新建了一个用户控件WW里面有一个Textbox1

    main.xaml中的Canvas1动态添加了俩个WW

    通过Xamlwrite.save(Canvas1)保存了下来

    然后通过.XamlReader.Load();会报错Textbox1有重复(name相同)

    该怎么解决呢!

    2012年10月17日 4:38

答案

  • 请查看XamlWiter.Save的限制

    Save 进行序列化。

    • 向量或图形输出:呈现的区域的输出可用于在重新加载时重新生成相同的向量或图形。

    • 多格式文本和流文档:输出中会保留文本以及文本内的所有元素格式和元素包容。 这对类似于剪贴板功能的机制可能非常有用。

    • 保留业务对象数据:如果您已经在自定义元素中存储了数据(如 XML 数据),则只要您的业务对象遵循基本的 XAML 规则(如提供自定义构造函数和按引用属性值转换),这些业务对象就可以通过序列化永久保留。


    Thanks! Damon.Tian

    2012年10月17日 11:52
  • 实际上,Damon.Tian的回答很正确,你应当看一下XamlWriter.Save的实际应用情况。

    并且,这是有关NameScope的文章:http://msdn.microsoft.com/zh-cn/library/ms746659.aspx

    我不清楚你的实际应用是什么,我更推荐新建一个控件,并使用相同的DataContext,而不是复制它,因为Save过程会删除所有StaticResource和Binding,以及事件。


    Wanpeng wanpeng.ones@gmail.com

    2012年10月19日 7:10

全部回复

  • 请查看XamlWiter.Save的限制

    Save 进行序列化。

    • 向量或图形输出:呈现的区域的输出可用于在重新加载时重新生成相同的向量或图形。

    • 多格式文本和流文档:输出中会保留文本以及文本内的所有元素格式和元素包容。 这对类似于剪贴板功能的机制可能非常有用。

    • 保留业务对象数据:如果您已经在自定义元素中存储了数据(如 XML 数据),则只要您的业务对象遵循基本的 XAML 规则(如提供自定义构造函数和按引用属性值转换),这些业务对象就可以通过序列化永久保留。


    Thanks! Damon.Tian

    2012年10月17日 11:52
  • 您好!您的回答不是我所要问的!

    2012年10月19日 2:51
  • 如果你自己看上面的链接,你就会明白原因就在里面。因为save的时候是在运行时得到的树结构,不包含引用关系。而你使用自定义控件式有引用关系的。所以这种情况下不能直接把save的数据和你直接编写Xaml的效果是不同的。由于引用解释的关系,你的自定控件中的控件直接解释在当前页面,就导致了会有重复的命名。

    Thanks! Damon.Tian

    2012年10月19日 6:22
  • 实际上,Damon.Tian的回答很正确,你应当看一下XamlWriter.Save的实际应用情况。

    并且,这是有关NameScope的文章:http://msdn.microsoft.com/zh-cn/library/ms746659.aspx

    我不清楚你的实际应用是什么,我更推荐新建一个控件,并使用相同的DataContext,而不是复制它,因为Save过程会删除所有StaticResource和Binding,以及事件。


    Wanpeng wanpeng.ones@gmail.com

    2012年10月19日 7:10