C#PropertyGrid-使所有属性不加粗

C#PropertyGrid-使所有属性不加粗,c#,winforms,propertygrid,C#,Winforms,Propertygrid,在PropertyGrid表单元素中,当我将属性添加到类别中时,有些属性以粗体显示。 现在,我知道这表明它们是该类别中的默认值。我的问题是如何使所有属性不加粗? 我知道一种可能的方法是更改DefaultValueAttribute属性,但我想知道是否可以用另一种方法:建议我可能必须使用反射,这在目前对我来说有点神秘:) 提前感谢您对于每个属性,您可以添加: private bool ShouldSerialize{PropertyName}() { return false; } 除此之外,您

在PropertyGrid表单元素中,当我将属性添加到类别中时,有些属性以粗体显示。
现在,我知道这表明它们是该类别中的默认值。我的问题是如何使所有属性不加粗?
我知道一种可能的方法是更改DefaultValueAttribute属性,但我想知道是否可以用另一种方法:建议我可能必须使用反射,这在目前对我来说有点神秘:)

提前感谢您

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

private bool ShouldSerialize{PropertyName}() { return false; }
除此之外,您还可以通过
ICustomTypeDescriptor
TypeDescriptionProvider
进入自定义
PropertyDescriptor
实现的领域


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

在您自己的属性上使用[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);
    }
}

那论坛第9条消息中的建议呢?似乎更general@bks这就是我上面提到的“custom
PropertyDescriptor
”路线;当然,您可以做到这一点,但这并不是一件小事——至少,您需要先编写一个菊花链
PropertyDescriptor