19

我在 C# 中找不到 PropertyGrid 的可用属性列表,你知道在哪里可以找到吗?

谢谢。

4

5 回答 5

27

影响 PropertyGrid 的属性是间接的:有趣的代码是提供 PropertyDescriptor 实现的 TypeDescriptor。然而,这辆面包车被 ICustomTypeDescriptor 或 TypeDescriptionProvider 否决了。

但是,如果我们假设默认规则,则发挥作用的关键属性是:

  • [DisplayName(...)]
  • [Description(...)]
  • [Category(...)]
  • [TypeConverter(...)]
  • [ReadOnly(...)]
  • [Browsable(...)]
  • [DefaultValue(...)]
  • [Editor(...)]

其他一些事情可以通过模式检测到,例如是否存在 ShouldSerialize{name} 或 Reset{name} 方法。

于 2013-02-24T11:43:41.540 回答
4

我还要补充

RefreshProperties 属性

NotifyParentPropertyAttribute

于 2013-11-11T10:03:27.227 回答
1

如果 PropertyGrid 来自 Xceed Extended.Wpf.Toolkit 它也依赖于 System.ComponentModel.DataAnnotations.Display 属性。

[Display(Name="", Description="", Order=1)]

有了它,您可以提供:

  1. 名称覆盖 [DisplayName(...)]
  2. 描述可能覆盖 [Description(...)]
  3. 列表中的订单(唯一的,我不知道其他提供订单的方式)
  4. 还有其他几个(GroupName、Prompt、ShortName、ResourceType、AutoGenerateField、AutoGenerateFilter),但我没有测试它们,可以说它们在属性网格中工作......
于 2020-09-18T22:32:18.847 回答
0

我还会添加“MergableAttribute”。这对于防止属性网格对标识字段进行分组很有用,因为如果您选择多个对象,您不希望能够使用属性网格修改对象的“名称”属性(例如),因为它必须每个对象保持唯一...

于 2016-01-05T12:49:24.883 回答
0

我没有看到一个很好的解决方案来订购 WinForms PropertyGrid 的属性,所以这是我使用的解决方案:

pgDetails.PropertySortChanged += (s, ea) =>
{
    if (pgDetails.PropertySort == PropertySort.CategorizedAlphabetical)
    {
        pgDetails.PropertySort = PropertySort.Categorized;
    }
};

pgDetails.PropertySort = PropertySort.Categorized;

这样做的方式是网格现在将维护类中属性的声明顺序。

于 2021-02-11T07:28:43.487 回答