【发布时间】:2014-09-25 16:41:22
【问题描述】:
我正在使用 WinForms PropertyGrid 在 WPF 应用程序中编辑对象属性。但是,PropertyGrid 对于某些属性类型无法按预期工作。具体来说,暴露Color 或Brush 类型属性的对象显示为文本,例如#FF000000,并且在@987654326 中单击该类型的单元格时不会出现下拉颜色选择器列表@。据我了解,这些类型存在内置编辑器,我不应该做任何额外的事情来让它工作(如果我错了,请纠正我)。
为简洁起见,我不会包含大量代码,但我只想说一切都是样板文件。我的实现是直接从 MSDN、SO 或网络上漂浮的无数 WPF PropertyGrid 示例中挑选出来的。 PropertyGrid 包裹在 WindowsFormsHost 中,Window 会在用户想要编辑对象时弹出。类似的东西:
`<Window>
<Grid>
<WindowsFormsHost>
<PropertyGrid>
...
</PropertyGrid>
</WindowsFormsHost>
</Grid>
</Window>
// BTW everything's implemented in code.
实际对象当然不是直接传递给PropertyGrid,而是包装在自定义PropertyEditorObjects中,它以预定义的方式仅公开那些感兴趣的属性,有时这些PropertyEditorObjects可能会实现ICustomTypeDescriptor ,尤其是当正在编辑的对象具有子对象时,其属性也需要作为嵌套属性暴露给PropertyGrid。一般:
public class PropertyEditorObject
{
...
property bool SomeProperty { get; set; }
property Size AnotherProperty { get; set; }
property Brush YetAnotherProperty { get; set; }
[TypeConverter(typeof(ExpandableObjectConverter))]
property ContentProperties MoreProperties { get; }
};
public class ContentProperties : ICustomTypeDescriptor
{
// Implements all the usual ICustomTypeDescriptor stuff.
}
// The PropertyGrid.SelectedObject is set to an instance of the PropertyEditorObject.
除了我在本文开头提到的内容外,一切都有效:某些属性类型(颜色、字体等)仅显示为文本,PropertyGrid 没有为此使用正确的编辑器输入。
我寻求帮助的原因是因为我想使用内置的 WinForms 编辑器,例如 ColorDialog、FontDialog 等来编辑这些类型,而不必重新发明轮子,因为我的应用程序仅处于演示阶段。对此问题的任何指导将不胜感激。谢谢。
【问题讨论】:
标签: wpf propertygrid