C# 以编程方式复制WPF控件

C# 以编程方式复制WPF控件,c#,wpf,C#,Wpf,我有一个选项卡控件,当用户想要添加到它时,我想复制一些已经存在的元素(而不仅仅是引用它们)。现在,到目前为止,我只是硬拷贝了我想要的变量。但是我在自动调整大小的代码中遇到了一个问题——也就是说,在调整窗口大小时,复制的元素明显落后于原始元素。此外,随着列表的增长,继续复制我需要复制的每个元素是不可行的。有什么方法可以用来复制WPF控件吗?现在,这只是一个文本框和一个选项卡项。我可能无法理解您的问题,但您可以创建一个自定义用户控件,并且每当需要添加新控件时,只需创建该控件的新实例并将其添加到场景中

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

我可能无法理解您的问题,但您可以创建一个自定义用户控件,并且每当需要添加新控件时,只需创建该控件的新实例并将其添加到场景中,通过这种方式,您可以使用
DataContext
来帮助进行数据绑定,您可以从复制的控件使用该数据绑定:

MyControl newControl = new MyControl { DataContext = controlToCopy.DataContext };
myGrid.Children.Add(newControl);
或类似的


或者您需要它更具动态性吗?

我不太清楚您想做什么,但是如果您想要一个与现有控件实例相同的新实例,可以使用XamlWriter和XamlReader对控件进行序列化/反序列化:

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

这是一个很好的解决方案,但需要大量定制(如果您使用绑定、StaticResources、X:Name属性等),因此您必须注意这些文章中提到的问题XamlWriter.Save的序列化限制[由XamlWriter编写[这些链接已失效:(