【问题标题】:Italic text in a PropertyGridPropertyGrid 中的斜体文本
【发布时间】:2009-04-13 19:03:33
【问题描述】:

我正在使用 PropertyGrid 来显示通过 ICustomTypeDescriptor 的实现公开的自定义属性。

我的对象设置在树结构中,每个属性的值要么在每个对象中设置,要么从父对象继承。在 PropertyGrid 中,我想直观地向用户展示在所选对象中设置了哪些属性值,以及哪些属性值是从父对象继承的。

现在我将每个属性都显示为两个类别。一组显示在实际对象中设置的值,如果未设置,则带有空白字段。另一组显示分配给对象的属性值,这些属性值要么在对象中设置,要么在对象中未设置时继承。

我想将这两组组合成一个购买,以常规文本显示设置属性,并以斜体文本显示继承值。但是,似乎没有任何方法可以通过 ICustomTypeDescriptor.GetProperties() 做到这一点。而且我无法轻松访问 PropertyGrid 的属性,因为它们是在程序运行时创建的。

【问题讨论】:

    标签: c# propertygrid


    【解决方案1】:

    您不能使用斜体 - 但可以使用粗体;粗体行为由PropertyDescriptorShouldSerializeValue 决定;您可以通过各种 System.ComponentModel 技巧(ICustomTypeDescriptorTypeConverterTypeDescriptionProvider)包装 PropertyDescriptors,并提供您自己的 PropertyDescriptor

    或者,有更多选项的类似网格,例如by VisualHint - 请参阅该页面上的“属性自定义”。

    【讨论】:

    • 那么如果 PropertyDescriptor 为 ShouldSerialize() 返回 true,那么该属性会是粗体吗?这不是这种方法的真正意图吗?如果我已经在使用 DataContractSerializer 对这些对象进行序列化,那么弄乱这个方法是否有可能改变我的对象的序列化方式?
    • 这取决于... XmlSerializer(但不是 AFAIL、DataContractSerializer)按名称识别模式,但它不使用 PropertyDescriptor。如果您使用运行时描述符(而不是公共的 bool ShouldSerialize*(),那么您应该没问题。但取决于您...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2013-05-23
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多