我似乎无法在任何地方找到答案。哪些默认编辑器/转换器正在构建到 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 以完成此操作。