【问题标题】:C#: PropertyGrid Only Show 2+ Categories via BrowsableAttributesC#:PropertyGrid 仅通过 BrowsableAttributes 显示 2+ 类别
【发布时间】:2014-11-06 02:08:22
【问题描述】:

Property grid only show some category 相同的问题,但显示多个类别而不是仅 1 个。

我有 3 个类别:全部、红色、蓝色。

我想在 PropertyGrid 中显示 All 和 Red 类别。

我试试:

myPropertyGrid.BrowsableAttributes = new AttributeCollection(new CategoryAttribute("All"), new CategoryAttribute("Red"));

但什么都没有显示。如果我只放 1 个 CategoryAttribute 它可以正常工作,但这不是我想要的。

【问题讨论】:

    标签: c# user-interface attributes


    【解决方案1】:

    如果您需要这种级别的操作,大多数人会说您错误地实现了属性网格。可以滥用属性网格并分配属性以使您的 GUI 易于开发,但对于使用您的代码或最终产品的其他人来说,定义的面向目的的 GUI 可能是更好的选择。我知道这不是你想要的答案,而是事实。

    如果您必须使用属性网格,我经常编写一个包装器,它只公开我希望在属性网格上显示的属性。这有助于防止我的代码更改破坏我的最终用户 GUI。

    显然,这个例子可以用[Browsable(false)] 来完成,但我只是为了演示这个概念而做的很简单。

    我有

    class Vector4
    {
        property float X {get;set;}
        property float Y {get;set;}
        property float Z {get;set;}
        property float W {get;set;}
    }
    

    但不希望属性 W 在属性网格中可见。制作一个类似

    的包装器
    class Vector4Wrapper
    {
        Vector4 refVector;
    
        property float X 
        {
            get{ return refVector.X; }
            set{ refVector.X = value; }
        }
        property float Y 
        {
            get{ return refVector.Y; }
            set{ refVector.Y = value; }
        }
        property float Z 
        {
            get{ return refVector.Z; }
            set{ refVector.Z = value; }
        }
    
        Vector4Wrapper(Vector4 refVector)
        {
            refVector = refVector;
        }
    }
    

    最后,通过这样说来使用包装器来仅公开您想要的属性:

    Vector4 vect;
    propertyGrid.SelectedObject = new Vector4Wrapper(vect);
    

    【讨论】:

      【解决方案2】:

      我也遇到过类似的问题:

      问题在于,如果您向BrowsableAttributes 提供多个值,PropertyGrid 将仅显示具有所有这些属性的属性。因此,如果您提供两个不同的类别,它只会显示两个类别中的属性。 CategoryAttribute 不允许您指定多个类别,因此这不起作用。

      我设法通过创建自己的自定义属性类来解决这个问题。

      见: Disabling items in PropertyGrid using Custom Attributes

      【讨论】:

        猜你喜欢
        • 2012-08-03
        • 2014-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        相关资源
        最近更新 更多