PropertyGrid属性列表

时间:2013-02-24 11:30:13

标签: c# propertygrid

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

感谢。

5 个答案:

答案 0 :(得分:21)

影响PropertyGrid的属性是间接的:有趣的代码是提供PropertyDescriptor实现的TypeDescriptor。但是,这个van可以被ICustomTypeDescriptor或TypeDescriptionProvider推翻。

但是,如果我们假设默认规则,那么游戏中的关键属性是:

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

其他一些事情可以通过存在ShouldSerialize {name}或Reset {name}方法等模式来检测。

答案 1 :(得分:4)

我还要添加

RefreshPropertiesAttribute

NotifyParentPropertyAttribute

答案 2 :(得分: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),但是我没有对其进行测试,可以说它们在属性网格中的工作原理如何……

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

pgDetails.PropertySort = PropertySort.Categorized;

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