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

本文关键字:属性 PropertyGrid | 更新日期: 2023-09-27 18:08:52

在PropertyGrid表单元素中,当我向类别添加属性时,有些属性会以粗体显示。
现在,我知道这表明它们是该类别中的默认值。我的问题是如何使所有属性不是加粗?
我知道一种可能的方法是改变DefaultValueAttribute属性,但我想知道它是否可以以不同的方式完成:这篇文章建议我可能不得不使用反射,这对我来说是一种神秘的时刻:)
提前谢谢大家

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

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

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

除此之外,您可以通过ICustomTypeDescriptorTypeDescriptionProvider进入自定义PropertyDescriptor实现的领域。

请注意,这个模式在许多地方使用,但在某些地方(例如XmlSerializer),它需要是public方法。

在您自己的属性上使用[Default] Attribute,否则您可能会(自担风险)进行以下可怕的攻击。

已在。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);
    }
}