当您在窗体上有一个 TableLayoutPanel 并将 Label 拖入单元格中时,Label 控件上会有几个可用属性。我认为当您将 Tooltip 控件拖到窗体上时,使用的是相同的构造。
我想知道使用的是哪种设计模式来实现这一点。这是装饰器模式吗?
我想知道使用的是哪种设计模式来实现这一点。这是装饰器模式吗?
IExtenderProvider
。WinForms Designer将为表面上的每个其他控件调用CanExtend
,并且你的扩展程序可以指定是否为每个控件提供其他属性。public interface IExtenderProvider {
bool CanExtend(object extendee);
}
其他控件将被扩展的实际属性是使用ProvidePropertyAttribute
和提供值的方法声明的。
CanExtend
来检查每个控件 - 但是它不是真正的访问者,因为它依赖于在CanExtend
方法中进行类型检查。扩展属性如何在设计器中的属性网格中实际公开也是一种未知的内部机制(实际上有一篇旧的MSDN文章详细介绍了它)。 - quentin-starinControl
。 Visual Studio设计器检查实现这些控件的类以确定其公开的属性,然后为您提供UI来设置它们。