我正在使用WinForms PropertyGrid
编辑WPF应用中的对象属性。但是,某些属性类型PropertyGrid
无法正常工作。具体而言,显示类型Color
或Brush
的属性的对象显示为文本#FF000000
,例如,当该类型的单元格时,不显示下拉颜色选择器列表单击PropertyGrid
。我的理解是这些类型存在内置编辑器,我不应该做任何额外的工作来使其工作(如果我错了,请纠正我。)
为了简洁起见,我不会包含大量的代码,但足以说一切都是非常好的代码。我的实现是直接从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
除了我在本文开头提到的内容外,一切都有效:某些属性类型(颜色,字体等)仅显示为文本而ColorDialog
未使用正确的编辑器对于那种类型。
我要求帮助的原因是因为我想使用内置的WinForms编辑器,例如FontDialog
,{{1}}等来编辑这些类型而不用不得不重新发明轮子,因为我的应用程序只在演示阶段。关于这个问题的任何方向都将不胜感激。感谢名单。
答案 0 :(得分:1)
这是可以预料的。 WinForms属性网格对Color
,Brush
或FontFamily
等WPF类型一无所知,因此它没有自定义编辑器。您是否尝试过第三方WPF属性网格之一?我相信Extended WPF Toolkit有一个。
答案 1 :(得分:0)
我的临时解决方案:Install Extended WPF Toolkit Plus
,使用PropertyGrid Plus
(具有SelectedObject*s*
属性)作为编辑器,等待v2.3中的“修复”,据称支持更多'types'(形状,带有火焰的旋转波浪形射击两侧,字母'a'等),同时如果用户试图编辑不支持的'类型',则抛出一个说明sorry, but you should really send us some money first.
的异常目前为止就这样了。我发明它时就会有更多的讽刺。 Thanx向评论者提出建议。 Toodles。
答案 2 :(得分:0)
解决方案更新:
1)使用Winforms PropertyGrid
,如原始帖子中所述,将EditorAttributes
添加到需要它们的属性,例如颜色,字体等,并打开Winforms ColorDialog
,FontDialog
等进行编辑。需要一些类型转换,但只需几行代码。不是最好的解决方案,但是工作。
2)使用Extended WPF Toolkit PropertyGrid
。工作,排序,但有限制。不支持所有类型或多个对象选择,即不支持SelectedObjects
属性。第一个问题将在工具包的v2.3中修复。第二种是showstopper,没有编写包装来促进功能。
3)使用Extended WPF Toolkit Plus
,PropertyGrid Plus
。允许多项选择,但仍然受限于类型选择。此外,费用大dinero。
4)使用WWF PropertyInspector
作为WPF PropertyGrid。在纸面上看起来很好,但最终功能并不比WinForms PropertyGrid
好。需要编辑/转换器。