过滤PropertyGrid中显示的属性

问题描述 投票:1回答:2

请有人告诉我如何只列出我要在PropertyGrid中显示的属性。

示例创建一个列表或属性,并仅显示该列表中的该属性。

这里有一个不错的属性网格示例,就是我现在正在使用的。

http://hotfile.com/dl/104485386/ce9e469/PropertyGridDemo.rar.html

如果能粘贴示例代码我非常感激。

c# .net wpf filter propertygrid
2个回答
4
投票

如果查看代码,只会添加可浏览的属性。

if (!property.IsBrowsable) continue;

因此,如果您不想显示属性,请将其设置为不可浏览。你可以做点什么

[Browsable(false)]

如果您不希望在属性网格上显示属性,请提供Browsable属性并将其设置为false。

[Browsable(false)]
public SolidColorBrush Background { get; set; }

希望能帮助到你


1
投票

您可以像Anuraj所说的那样使用Browsable属性,或者如果您想要更多控制(如果您要创建从其他类/控件派生的自定义控件并使用自定义属性网格控件),您可以创建自己的属性并使用它来过滤出去的财产。

以下是如何实现这一目标 -

第1步 - 创建自定义属性

/// <summary>
/// Attribute to identify the Custom Proeprties.
/// Only Proeprties marked with this attribute(true) will be displayed in property grid.
/// </summary>
[global::System.AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
public sealed class IsCustomPropertyAttribute : Attribute
{
    // See the attribute guidelines at 
    //  http://go.microsoft.com/fwlink/?LinkId=85236

    private bool isCustomProperty;

    public IsCustomPropertyAttribute(bool isCustomProperty)
    {
        this.isCustomProperty = isCustomProperty;
    }

    public bool IsCustomProperty
    {
        get { return isCustomProperty; }
        set { isCustomProperty = value; }
    }

    public override bool IsDefaultAttribute()
    {
        return isCustomProperty == false;
    }
}

第2步

在您的控件(您要显示其属性)中使用此属性标记每个属性,如下所示 -

    [IsCustomProperty(true)]
    [DisplayName("Orientation")]
    public bool ScaleVisibility
    {
        get { return (bool)GetValue(ScaleVisibilityProperty); }
        set { SetValue(ScaleVisibilityProperty, value); }
    }
    public static readonly DependencyProperty ScaleVisibilityProperty =
        DependencyProperty.Register("ScaleVisibility", typeof(bool),
        typeof(IC_BarControl), new UIPropertyMetadata(true));

第3步

现在,在您的属性网格代码中(您在属性网格中添加属性)添加对此属性的检查,如下所示 -

    //Check if IsCustomPropertyAttribute is defined for this property or not
    bool isCustomAttributeDefined = Attribute.IsDefined(type.GetProperty
          (propertyDescriptor.Name), typeof(IsCustomPropertyAttribute));

    if (isCustomAttributeDefined == true)
       {
          //IsCustomPropertyAttribute is defined so get the attribute
          IsCustomPropertyAttribute myAttribute = 
            Attribute.GetCustomAttribute(type.GetProperty(propertyDescriptor.Name),
            typeof(IsCustomPropertyAttribute)) as IsCustomPropertyAttribute;

           //Check if current property is Custom Property or not
           if (myAttribute != null && myAttribute.IsCustomProperty == true)
               {
                   AddProperty(propertyDescriptor);
               }
        }
© www.soinside.com 2019 - 2024. All rights reserved.