以编程方式复制WPF控件

Pup*_*ppy 8 c# wpf

我有一个标签控件,当用户想要添加它时,我想复制已经存在的几个元素(不仅仅是引用它们).现在,到目前为止,我刚刚复制了我想要的变量.但是我在自动调整大小代码中使用了一个裁剪器 - 也就是说,在调整窗口大小时,复制的元素明显落后于原始元素.另外,随着列表的增长,继续复制我需要复制的每个元素是不可行的.我可以使用哪些方法来复制WPF控件吗?现在,这只是一个文本框和一个标签项.

Joh*_*wen 12

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

MyControl copy = XamlReader.Parse(XamlWriter.Save(controlInstance)) as MyControl;
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案,但需要大量的自定义(如果你使用绑定,StaticResources,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] (3认同)

Mar*_*ark 11

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

MyControl newControl = new MyControl { DataContext = controlToCopy.DataContext };
myGrid.Children.Add(newControl);
Run Code Online (Sandbox Code Playgroud)

或类似......

或者你需要它比那更有活力吗?