请有人告诉我如何只列出我要在PropertyGrid
中显示的属性。
示例创建一个列表或属性,并仅显示该列表中的该属性。
这里有一个不错的属性网格示例,就是我现在正在使用的。
http://hotfile.com/dl/104485386/ce9e469/PropertyGridDemo.rar.html
如果能粘贴示例代码我非常感激。
如果查看代码,只会添加可浏览的属性。
if (!property.IsBrowsable) continue;
因此,如果您不想显示属性,请将其设置为不可浏览。你可以做点什么
[Browsable(false)]
如果您不希望在属性网格上显示属性,请提供Browsable属性并将其设置为false。
[Browsable(false)]
public SolidColorBrush Background { get; set; }
希望能帮助到你
您可以像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);
}
}