C#PropertyGrid - 使所有属性不是粗体

时间:2011-09-16 08:48:45

标签: c# winforms propertygrid

在PropertyGrid表单元素中,当我向我的类别添加属性时,一些属性以粗体显示 现在,我知道它表明它们是该类别中的默认值。我的问题是如何使所有属性加粗?
我知道一种可能的方法是更改​​DefaultValueAttribute属性,但我想知道它是否可以以不同的方式完成:this post表明我可能必须使用反射,这对我来说是一种神秘的感觉: )
提前谢谢

2 个答案:

答案 0 :(得分:3)

对于每个属性,您可以添加:

private bool ShouldSerialize{PropertyName}() { return false; }

除此之外,您通过PropertyDescriptorICustomTypeDescriptor进入自定义TypeDescriptionProvider实施领域。

请注意,此模式在很多地方使用,但在某些地方(例如XmlSerializer)中,它必须是public方法。

答案 1 :(得分:1)

在您自己的属性上使用[Default]属性,否则,您将承担以下可怕的骇客,后果自负。

在.Net Framework 4.7.2中尝试过。您还将放宽类别上的粗体。

class MyNoBoldPropertyGrid : PropertyGrid
{
    private void SetFontNoBold()
    {
        if (!DesignMode)
        {
            object lv = Controls[2];
            Type lvType = lv.GetType();
            FieldInfo pi = lvType.GetField("fontBold", BindingFlags.Instance | BindingFlags.NonPublic);
            if (pi != null)
            {
                pi.SetValue(lv, Font);
            }
        }
    }
    protected override void OnPaint(PaintEventArgs pevent)
    {
        SetFontNoBold();
        base.OnPaint(pevent);
    }           

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x210) // WM_PARENTNOTIFY
            SetFontNoBold();        
        base.WndProc(ref m);
    }
}