我似乎无法在任何地方找到答案。哪些默认编辑器/转换器正在构建到 3.5 框架 PropertyGrid 控件中。否则我可以扔给它什么对象类型并且它能够可靠地显示和编辑?我找到了很多关于使用自定义编辑器的教程(我可能会在某个时候这样做)。但是现在在我的程序中,我允许用户创建他们自己的自定义属性,并且我想知道我应该允许哪些对象类型,假设他们将在 PropertyGrid 中编辑它们。
5 回答
请记住,有一些非公开课程。
System.Object
System.Drawing.Design.UITypeEditor
System.ComponentModel.Design.CollectionEditor
System.ComponentModel.Design.ArrayEditor
System.Web.UI.Design.CollectionEditorBase
System.Web.UI.Design.WebControls.WizardStepCollectionEditor
System.Web.UI.Design.WebControls.EmbeddedMailObjectCollectionEditor
System.Web.UI.Design.WebControls.HotSpotCollectionEditor
System.Web.UI.Design.WebControls.ListItemsCollectionEditor
System.Web.UI.Design.WebControls.MenuItemStyleCollectionEditor
System.Web.UI.Design.WebControls.RoleGroupCollectionEditor
System.Web.UI.Design.WebControls.StyleCollectionEditor
System.Web.UI.Design.WebControls.SubMenuStyleCollectionEditor
System.Web.UI.Design.WebControls.TableCellsCollectionEditor
System.Web.UI.Design.WebControls.TableRowsCollectionEditor
System.ComponentModel.Design.BinaryEditor
System.ComponentModel.Design.DateTimeEditor
System.ComponentModel.Design.MultilineStringEditor
System.ComponentModel.Design.ObjectSelectorEditor
System.Windows.Forms.Design.AnchorEditor
System.Windows.Forms.Design.BorderSidesEditor
System.Windows.Forms.Design.DockEditor
System.Windows.Forms.Design.FileNameEditor
System.Windows.Forms.Design.FolderNameEditor
System.Windows.Forms.Design.ShortcutKeysEditor
System.Web.UI.Design.ConnectionStringEditor
System.Web.UI.Design.DataBindingCollectionEditor
System.Web.UI.Design.ExpressionsCollectionEditor
System.Web.UI.Design.UrlEditor
System.Web.UI.Design.XmlFileEditor
System.Web.UI.Design.WebControls.DataGridColumnCollectionEditor
System.Web.UI.Design.WebControls.DataControlFieldTypeEditor
System.Web.UI.Design.WebControls.MenuBindingsEditor
System.Web.UI.Design.WebControls.MenuItemCollectionEditor
System.Web.UI.Design.WebControls.ParameterCollectionEditor
System.Web.UI.Design.WebControls.RegexTypeEditor
System.Web.UI.Design.WebControls.TreeNodeCollectionEditor
System.Web.UI.Design.WebControls.TreeViewBindingsEditor
System.Web.UI.Design.WebControls.DataPagerFieldTypeEditor
System.Messaging.Design.QueuePathEditor
System.Drawing.Design.ImageEditor
System.Drawing.Design.ColorEditor
System.Drawing.Design.ContentAlignmentEditor
System.Drawing.Design.CursorEditor
System.Drawing.Design.FontEditor
System.Drawing.Design.FontNameEditor
System.Drawing.Design.IconEditor
System.Workflow.ComponentModel.Design.TypeBrowserEditor
System.Workflow.ComponentModel.Design.BindUITypeEditor
您可能想查看派生自UITypeEditor(在System.Drawing.Design命名空间中)的类。这些类型将作为参数传递给EditorAttribute(在System.ComponentModel命名空间中)。
您还可以查看该类型的元数据以查看EditorAttribute应用的位置。但是,不要在这里使用反射,因为这不是PropertyGrid类使用的。
而是使用TypeDescriptor类来获取类型上的属性的属性描述符(调用静态GetProperties方法)。然后,使用该PropertyDescriptor实例,调用该GetEditor方法以获取该属性的编辑器实例。
您实际上可以在 PropertyGrid 中抛出任何对象。它会自动做很多事情。如果您想拥有特殊的编辑体验,您只需要创建自定义 UI 类型编辑器,这不是本机提供的。即使在这种情况下,您也可以针对每个属性而不是针对整个对象执行此操作。
PropertyGrid 使用 TypeConverters,每个原始类型(以及原始类型的集合)都有 TypeConverters。
只要您使用原始类型之一或原始类型集合,属性网格就应该能够提供编辑 UI。
除了 UITypeEditors,PropertyGrid 还能够显示任何具有 TypeConverter 的对象,该类型转换器为 CanConvertFrom(String) 返回 true。您可以为特定对象类型实现自己的 TypeConverters 以完成此操作。