在一个PropertyGrid表单元素中,当我向我的类别添加属性时,一些属性以粗体字出现。现在,我知道这表明它们是该类别中的默认值。我的问题是如何使所有属性 不 粗体?我知道一种可能的方法是改变DefaultValueAttribute属性,但我想知道是否可以用另一种方法。这个帖子 建议我可能要使用反射,这对我来说有点神秘:) 先谢谢你
对于每个属性,你可以添加。
private bool ShouldSerialize{PropertyName}() { return false; }
除此之外,你就进入了自定义的领域了 PropertyDescriptor
的实施,通过 ICustomTypeDescriptor
或 TypeDescriptionProvider
.
请注意,这种模式在很多地方都有使用,但在一些(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);
}
}