WinForms PropertyGrid在WPF应用程序中意外行为

时间:2014-09-25 16:41:22

标签: wpf propertygrid

我正在使用WinForms PropertyGrid编辑WPF应用中的对象属性。但是,某些属性类型PropertyGrid无法正常工作。具体而言,显示类型ColorBrush的属性的对象显示为文本#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}}等来编辑这些类型而不用不得不重新发明轮子,因为我的应用程序只在演示阶段。关于这个问题的任何方向都将不胜感激。感谢名单。

3 个答案:

答案 0 :(得分:1)

这是可以预料的。 WinForms属性网格对ColorBrushFontFamily等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 ColorDialogFontDialog等进行编辑。需要一些类型转换,但只需几行代码。不是最好的解决方案,但是工作。

2)使用Extended WPF Toolkit PropertyGrid。工作,排序,但有限制。不支持所有类型或多个对象选择,即不支持SelectedObjects属性。第一个问题将在工具包的v2.3中修复。第二种是showstopper,没有编写包装来促进功能。

3)使用Extended WPF Toolkit PlusPropertyGrid Plus。允许多项选择,但仍然受限于类型选择。此外,费用大dinero。

4)使用WWF PropertyInspector作为WPF PropertyGrid。在纸面上看起来很好,但最终功能并不比WinForms PropertyGrid好。需要编辑/转换器。