我有一个 PropertyGrid,它反映了我的班级的属性。
我正在观看 PropertyValueChanged 事件并注意到 PropertyValueChangedEventArgs 提供了已更改的 GridItem。
那个 GridItem 有一个我可以获得的 Tag 属性。我看不到如何将 GridItem 的 Tag 属性设置为一个值。
如何设置 GridItem 的 Tag 属性?
我有一个 PropertyGrid,它反映了我的班级的属性。
我正在观看 PropertyValueChanged 事件并注意到 PropertyValueChangedEventArgs 提供了已更改的 GridItem。
那个 GridItem 有一个我可以获得的 Tag 属性。我看不到如何将 GridItem 的 Tag 属性设置为一个值。
如何设置 GridItem 的 Tag 属性?
...我最初的答案离我很远,所以我在这次更新中修改了整个事情...
如果我需要满足这个要求,我会这样做。
创建一个属性,用于预定义 GridItem 的Tag值;我们称之为TagAttribute。它可以像这样简单:
public class TagAttribute : Attribute
{
public string TagValue { get; set; }
public TagAttribute ( string tagValue )
{
TagValue = tagValue;
}
}
要预定义Tag值,您只需要使用此属性装饰所需的属性。
public class MyAwesomeClass
{
...
[TagAttribute( "This is my tag value." )]
[CategoryAttribute( "Data" )]
public string MyAwesomeProperty { get; set; }
...
}
然后,我将继承PropertyGrid并覆盖OnPropertyValueChanged事件,以便将GridItem的Tag属性设置为与预定义的TagAttribute 一致。
public partial class InheritedPropertyGrid : PropertyGrid
{
...
protected override void OnPropertyValueChanged ( PropertyValueChangedEventArgs e )
{
var propertyInfo = SelectedObject.GetType().GetProperty( e.ChangedItem.PropertyDescriptor.Name );
var tagAttribute = propertyInfo.GetCustomAttributes( typeof( TagAttribute ) , false );
if ( tagAttribute != null )
e.ChangedItem.Tag = ( (TagAttribute)tagAttribute[0] ).TagValue;
base.OnPropertyValueChanged( e );
}
...
}
现在,当您连接到此“InheritedPropertyGrid”的OnPropertyValueChanged时, Tag属性将设置为您在该属性上定义的内容。