在PropertyGrid表单元素中,当我向我的类别添加属性时,一些属性以粗体显示
现在,我知道它表明它们是该类别中的默认值。我的问题是如何使所有属性不加粗?
我知道一种可能的方法是更改DefaultValueAttribute属性,但我想知道它是否可以以不同的方式完成:this post表明我可能必须使用反射,这对我来说是一种神秘的感觉: )
提前谢谢
答案 0 :(得分:3)
对于每个属性,您可以添加:
private bool ShouldSerialize{PropertyName}() { return false; }
除此之外,您通过PropertyDescriptor
或ICustomTypeDescriptor
进入自定义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);
}
}