以编程方式复制一个WPF控件

10

我有一个选项卡控件,如果用户想要添加内容,我希望能够复制一些已经存在的元素(不仅仅是引用它们)。到目前为止,我只是硬拷贝了我想要的变量。但是在自动调整大小代码中,我遇到了问题-也就是说,当调整窗口大小时,复制的元素明显滞后于原始元素。此外,随着需要复制的元素列表不断增长,保持复制每个元素是不可行的。我是否有一种方法可以使用来复制WPF控件?现在,这只是一个文本框和选项卡项。

2个回答

18

我不能完全确定你试图做什么,但如果你想要一个与现有控件实例相同的新实例,你可以使用XamlWriter和XamlReader来序列化/反序列化控件:

MyControl copy = XamlReader.Parse(XamlWriter.Save(controlInstance)) as MyControl;

3
这是一个好的解决方案,但需要大量的定制(如果您使用绑定、静态资源、X:Name 属性等) - 因此您必须注意这些文章中提到的问题:XamlWriter.Save 的序列化限制[http://msdn.microsoft.com/en-us/library/ms754193.aspx]和由 XamlWriter 编写[http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx]。 - akjoshi
1
这些链接已经失效了 :( - JobaDiniz

11

可能我误解了你的问题,但是你可以创建一个自定义的UserControl,每当你需要添加一个新的控件时,只需创建该控件的一个新实例并将其添加到场景中,这样你就可以使用 DataContext 来帮助数据绑定,你可以从要复制的控件中使用它:

MyControl newControl = new MyControl { DataContext = controlToCopy.DataContext };
myGrid.Children.Add(newControl);

或者类似的东西...

或者您需要它更加动态化吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接