维护控件之间的子/父关系
本文关键字:关系 控件 之间 维护 | 更新日期: 2023-09-27 18:35:55
我正在编写一个WP7 GUI并设计了一个控件类,以及一个派生自Control并具有子控件列表的ParentControl类。但是,将子项添加到 ParentControl 实例时,我无法访问子项的父引用,因为我将其设置为"保护"控件的用户。
确切的错误是
"无法通过类型为"控件"的限定符访问受保护的成员"控件.Parent";
限定符的类型必须是"父控件"(或派生自它)"
public abstract class Control //such as a button or radio button
{
public ParentControl Parent { get; protected set; }
}
public abstract class ParentControl : Control //such as a panel or menu
{
protected List<Control> children = new List<Control>();;
public void AddChild(Control child, int index)
{
NeedSizeUpdate = true;
if (child.Parent != null)
child.Parent.RemoveChild(child);
child.Parent = this; //How do I access the parent?
children.Insert(index, child);
OnChildAdded(index, child);
}
}
我该如何解决这个问题?
是的,这是因为其他东西可能派生自 Control
,而ParentControl
只能访问它派生的控件的基本成员。例如,如果Control2
派生自Control
,则ParentControl
不会派生自Control2
,因此无法访问其基本成员。
因此,您可以Parent
作为公共属性,或者如果要将其隐藏在控件的一般用户之外,则可以通过接口进行访问,并显式实现它:
interface IChildControl
{
ParentControl Parent { get; set; }
}
public abstract class Control : IChildControl //such as a button or radio button
{
ParentControl IChildControl.Parent { get; set; }
}
显式实现(IChildControl.Parent
)意味着只有一个Control
实例的消费者将看不到Parent
属性。必须显式强制转换为IChildControl
才能访问它。