我有一堆用户控件(“MyUserControl”),我希望用户手动将其添加到一个或多个 Canvas 中。 UserControl 的一个实例不能是多个容器的子元素(否则会抛出“System.InvalidOperationException:元素已经是另一元素的子元素。”)。
有没有办法在不创建 MyUserControls 的新(重复)实例的情况下执行此操作?如果不是,保持 MyUserControls 的重复实例同步的最佳策略是什么?
最佳答案
您不能将同一控件实例(任何控件)添加为多个父控件的子控件。您将需要创建用户控件的多个实例并将每个实例放置在其自己的父级上。
如果您需要保持它们显示的数据同步,那么您应该将该数据存储在与用户控件本身分开的对象中,您只能拥有该对象的一个实例。通常,您会将此数据对象分配给每个用户控件的 DataContext 属性,然后用户控件的各个组件部分可以使用数据绑定(bind)获取其数据。
如果您确保数据对象正确实现 INotifyPropertyChanged
,那么当一个用户控件对数据进行更改时,它将反射(reflect)在引用同一数据对象的所有其他用户控件中。
关于Silverlight:将相同的用户控件添加到多个 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1880318/