我有一个 TreeViewItem,我在其中使用 TextBlock 作为 Header 属性,并使用自定义类作为 Tag 属性。如何创建 TreeViewItem 的副本?我试过序列化它,但它一直进入无限循环,创建堆栈溢出异常,当它尝试序列化 TreeViewItem 时,但我不知道在哪里。
这是我用作 TreeViewItem 的 Tag 属性的自定义类
[Serializable]
[XmlRoot(ElementName="TVITagProperty")]
public class TVITagProperty {
#region Members
/// <summary>
/// Tree Type
/// </summary>
public enum TreeType {
User = 1,
Other = 2,
}
/// <summary>
/// Tag Property Type
/// </summary>
public enum TagType {
Entity = 1,
User = 2,
};
#endregion
#region C'tor
/// <summary>
/// Public parameterless constructor
/// </summary>
public TVITagProperty() { }
/// <summary>
/// Create a TreeViewItem Tag Property
/// </summary>
/// <param name="type">Type of Tag Property</param>
/// <param name="value">Value of Tag Property</param>
public TVITagProperty(TreeType treeType, TagType tagType, string value) {
ViewType = treeType;
PropertyType = tagType;
PropertyValue = value;
PropertyDirectory = false;
}
/// <summary>
/// Create a TreeViewItem Tag Property
/// </summary>
/// <param name="type">Type of Tag Property</param>
/// <param name="value">Value of Tag Property</param>
public TVITagProperty(TagType type, long? value) {
PropertyType = type;
PropertyValue = value.ToString();
}
#endregion
#region Methods
/// <summary>
/// Overloaded Equals method, compares one TVI Tag Property Property Type and Value
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public bool Equals(TVITagProperty obj) {
if(obj != null) {
if(obj.PropertyDirectory == true) {
if(this.ViewType == obj.ViewType &&
this.PropertyType == obj.PropertyType) {
return true;
}
}
else if(this.ViewType == obj.ViewType &&
this.PropertyType == obj.PropertyType &&
this.PropertyValue.Equals(obj.PropertyValue)) {
return true;
}
}
return false;
}
/// <summary>
/// Overrides ToString() and returns Property value
/// </summary>
/// <returns></returns>
public override string ToString() {
return this.PropertyValue;
}
/// <summary>
/// Returns the Property value as a long
/// </summary>
/// <returns></returns>
public long ToLong() {
return long.Parse(this.PropertyValue);
}
#endregion
#region Properties
/// <summary>
/// Represents the type of TreeView used in the View
/// </summary>
[XmlAttribute]
public TreeType ViewType { get; set; }
/// <summary>
/// The type of Property Tag
/// </summary>
[XmlAttribute]
public TagType PropertyType { get; set; }
/// <summary>
/// The value of Property Tag
/// </summary>
[XmlAttribute]
public string PropertyValue { get; set; }
/// <summary>
/// Defines whether the TVI is an object or directory
/// </summary>
[XmlAttribute]
public bool PropertyDirectory { get; set; }
#endregion
}