c# PropertyGrid -使所有属性不加粗
本文关键字:属性 PropertyGrid | 更新日期: 2023-09-27 18:08:52
在PropertyGrid表单元素中,当我向类别添加属性时,有些属性会以粗体显示。
现在,我知道这表明它们是该类别中的默认值。我的问题是如何使所有属性不是加粗?
我知道一种可能的方法是改变DefaultValueAttribute属性,但我想知道它是否可以以不同的方式完成:这篇文章建议我可能不得不使用反射,这对我来说是一种神秘的时刻:)
提前谢谢大家
对于每个属性,您可以添加:
private bool ShouldSerialize{PropertyName}() { return false; }
除此之外,您可以通过ICustomTypeDescriptor
或TypeDescriptionProvider
进入自定义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);
}
}