我有一个名为 Widget 的父类。我有一个我存储的小部件列表。在这个列表中,我存储了 Widget 的子项,例如 Button、Label、DropDown 等。当在我的编辑器中选择了一个子项时,我将该对象(在 Widgets 列表中按名称查找)分配给 PropertyGrid。但是,由于它们存储为 Widget 类型,因此 PropertyGrd 仅显示 Widget 属性。我想在将子小部件设置为 PropertyGrid 时将其转换为实际类型,以便 PropertyGrid 可以看到孩子的属性,但我想动态执行此操作而不是使用 if/case 语句,因为子小部件使用插件系统所以我在设计时不知道类型是什么。我知道我必须使用反射,我对此很好,但我只是不知道该怎么做。
由于我将我的子小部件存储在父 Widget 的容器中,因此子部件将被存储为 Widget,不是吗?意味着 PropertyGrid 只看到 Widget 属性?
Dictionary<string, Widget> Widgets;
Widgets.Add("button1", new Button()); // gets converted to parent Widget
PropGrid.SelectedObject = Widgets["button1"];
public class Button : Widget.Widget
{
public String Test { get; set; } // this doesn't show up in the property grid
}