TreeNode.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using System.Windows.Input;
  4. using System.Windows.Media;
  5. namespace BehaviorTree
  6. {
  7. public class TreeNode : ContentControl, ITreeNode
  8. {
  9. public static readonly DependencyProperty CollapsedProperty =
  10. DependencyProperty.Register(
  11. "Collapsed",
  12. typeof(bool),
  13. typeof(TreeNode),
  14. new PropertyMetadata(
  15. false,
  16. CollapsePropertyChange
  17. ));
  18. static public void CollapsePropertyChange(DependencyObject o, DependencyPropertyChangedEventArgs e)
  19. {
  20. TreeNode tn = o as TreeNode;
  21. if (tn != null && tn.Collapsible)
  22. {
  23. bool fCollapsed = ((bool)e.NewValue);
  24. foreach (TreeNode tnCur in LayeredTreeDraw.VisibleDescendants<TreeNode>(tn))
  25. {
  26. tnCur.Visibility = fCollapsed ? Visibility.Collapsed : Visibility.Visible;
  27. }
  28. }
  29. }
  30. public bool Collapsed
  31. {
  32. get { return (bool)GetValue(CollapsedProperty); }
  33. set { SetValue(CollapsedProperty, value); }
  34. }
  35. public static readonly DependencyProperty CollapsibleProperty =
  36. DependencyProperty.Register(
  37. "Collapsible",
  38. typeof(bool),
  39. typeof(TreeNode),
  40. new PropertyMetadata(
  41. true,
  42. CollapsiblePropertyChange
  43. ));
  44. static public void CollapsiblePropertyChange(DependencyObject o, DependencyPropertyChangedEventArgs e)
  45. {
  46. TreeNode tn = o as TreeNode;
  47. if (((bool)e.NewValue) == false && tn != null)
  48. {
  49. tn.Collapsed = false;
  50. }
  51. }
  52. public bool Collapsible
  53. {
  54. get { return (bool)GetValue(CollapsibleProperty); }
  55. set { SetValue(CollapsibleProperty, value); }
  56. }
  57. public static readonly DependencyProperty TreeParentProperty =
  58. DependencyProperty.Register(
  59. "TreeParent",
  60. typeof(string),
  61. typeof(TreeNode),
  62. new PropertyMetadata(
  63. null,
  64. null
  65. ));
  66. public static TreeNode GetParentElement(TreeNode tn)
  67. {
  68. BehaviorPanel tc;
  69. TreeNode tnParent;
  70. if (tn == null)
  71. {
  72. return null;
  73. }
  74. tc = tn.Parent as BehaviorPanel;
  75. if (tc == null)
  76. {
  77. return null;
  78. }
  79. string strParent = tn.TreeParent;
  80. if (strParent == null)
  81. {
  82. return null;
  83. }
  84. tnParent = tc.FindName(strParent) as TreeNode;
  85. if (tnParent == null)
  86. {
  87. return null;
  88. }
  89. return tnParent;
  90. }
  91. public string TreeParent
  92. {
  93. get { return (string)GetValue(TreeParentProperty); }
  94. set { SetValue(TreeParentProperty, value); }
  95. }
  96. public TreeNode()
  97. {
  98. TreeChildren = new TreeNodeGroup();
  99. Background = new SolidColorBrush();
  100. }
  101. static TreeNode()
  102. {
  103. }
  104. internal void ClearParent()
  105. {
  106. TreeChildren = new TreeNodeGroup();
  107. }
  108. internal bool SetParent()
  109. {
  110. TreeNode tn = GetParentElement(this);
  111. if (tn == null)
  112. {
  113. return false;
  114. }
  115. tn.TreeChildren.Add(this);
  116. return true;
  117. }
  118. public object PrivateNodeInfo { get; set; }
  119. public TreeNodeGroup TreeChildren { get; private set; }
  120. internal Size NodeSize()
  121. {
  122. return DesiredSize;
  123. }
  124. public double TreeHeight
  125. {
  126. get
  127. {
  128. return NodeSize().Height;
  129. }
  130. }
  131. public double TreeWidth
  132. {
  133. get
  134. {
  135. return NodeSize().Width;
  136. }
  137. }
  138. }
  139. }