本文介绍如何创建 Reset<PropertyName>
和 ShouldSerialize<PropertyName>
方法来管理 Visual Studio 中 “属性” 窗口的属性。 您可以为属性提供Reset
和ShouldSerialize
可选方法,前提是该属性没有简单的默认值。 如果属性具有简单的默认值,则应使用 DefaultValueAttribute 并将默认值传递给特性类构造函数。 这两种机制都支持设计器中的以下功能:
- 如果属性已从其默认值修改,则此属性在属性浏览器中提供视觉指示。
- 用户可以右键单击该属性,然后选择 “重置” 将属性还原为其默认值。
- 设计器生成更高效的代码。
有关属性的详细信息,请参阅 Reset 和 ShouldSerialize。
辅助代码
本文通过创建指南针玫瑰控件来演示 Reset
和 ShouldSerialize
方法。 如果使用的是自己的用户控件,则可以跳过本部分。
将以下枚举添加到代码:
public enum Directions { None, North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest, }
Public Enum Directions None North NorthEast East SouthEast South SouthWest West NorthWest End Enum
添加名为
CompassRose
的用户控件。将名为
Direction
类型的Directions
属性添加到用户控件。public Directions Direction { get; set; } = Directions.None;
Public Property Direction As Directions = Directions.None
重置
该方法 Reset<PropertyName>
将相应的 <PropertyName>
属性重置为其默认值。
以下代码将属性重置 Direction
为 None
,该属性被视为指南针玫瑰控件的默认值:
private void ResetDirection() =>
Direction = Directions.None;
Private Sub ResetDirection()
Direction = Directions.None
End Sub
ShouldSerialize
ShouldSerialize<PropertyName>
方法返回一个布尔值,该值指示后备属性是否已从其默认值更改,以及是否应将其序列化为设计器的代码。
当Direction
属性不等于None
时,以下代码返回 true,表示已选择一个方向:
private bool ShouldSerializeDirection() =>
Direction != Directions.None;
Private Function ShouldSerializeDirection() As Boolean
Return Direction <> Directions.None
End Function
示例:
以下代码显示了 Direction
属性的 Reset
和 ShouldSerialize
方法:
public partial class CompassRose : UserControl
{
public Directions Direction { get; set; } = Directions.None;
public CompassRose() =>
InitializeComponent();
private void ResetDirection() =>
Direction = Directions.None;
private bool ShouldSerializeDirection() =>
Direction != Directions.None;
}
Public Class CompassRose
Public Property Direction As Directions = Directions.None
Private Sub ResetDirection()
Direction = Directions.None
End Sub
Private Function ShouldSerializeDirection() As Boolean
Return Direction <> Directions.None
End Function
End Class