DiagramItem.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using System.Windows.Documents;
  4. namespace SHJX.Service.WorkFlowEdit
  5. {
  6. public abstract class DiagramItem : Control
  7. {
  8. #region Properties
  9. private Adorner SelectionAdorner { get; set; }
  10. public object ModelElement { get; set; }
  11. #region IsSelected Property
  12. public bool IsSelected
  13. {
  14. get { return (bool)GetValue(IsSelectedProperty); }
  15. internal set { SetValue(IsSelectedProperty, value); }
  16. }
  17. internal static readonly DependencyProperty IsSelectedProperty =
  18. DependencyProperty.Register("IsSelected",
  19. typeof(bool),
  20. typeof(DiagramItem),
  21. new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnIsSelectedChanged)));
  22. private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  23. {
  24. if (!(bool)e.NewValue)
  25. {
  26. d.ClearValue(IsPrimarySelectionProperty);
  27. (d as DiagramItem).HideSelectionAdorner();
  28. }
  29. else
  30. (d as DiagramItem).ShowSelectionAdorner();
  31. }
  32. protected virtual void IsSelectedChanged()
  33. {
  34. }
  35. #endregion
  36. #region IsPrimarySelection Property
  37. public bool IsPrimarySelection
  38. {
  39. get { return (bool)GetValue(IsPrimarySelectionProperty); }
  40. internal set { SetValue(IsPrimarySelectionProperty, value); }
  41. }
  42. internal static readonly DependencyProperty IsPrimarySelectionProperty =
  43. DependencyProperty.Register("IsPrimarySelection",
  44. typeof(bool),
  45. typeof(DiagramItem),
  46. new FrameworkPropertyMetadata(false));
  47. #endregion
  48. #region CanMove Property
  49. public bool CanMove
  50. {
  51. get { return (bool)GetValue(CanMoveProperty); }
  52. set { SetValue(CanMoveProperty, value); }
  53. }
  54. public static readonly DependencyProperty CanMoveProperty =
  55. DependencyProperty.Register("CanMove",
  56. typeof(bool),
  57. typeof(DiagramItem),
  58. new FrameworkPropertyMetadata(true));
  59. #endregion
  60. #region CanSelect Property
  61. public bool CanSelect
  62. {
  63. get { return (bool)GetValue(CanSelectProperty); }
  64. set { SetValue(CanSelectProperty, value); }
  65. }
  66. public static readonly DependencyProperty CanSelectProperty =
  67. DependencyProperty.Register("CanSelect",
  68. typeof(bool),
  69. typeof(DiagramItem),
  70. new FrameworkPropertyMetadata(true));
  71. #endregion
  72. public abstract Rect Bounds { get; }
  73. #endregion
  74. protected void HideSelectionAdorner()
  75. {
  76. if (SelectionAdorner != null)
  77. {
  78. AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this);
  79. if (adornerLayer != null)
  80. adornerLayer.Remove(SelectionAdorner);
  81. SelectionAdorner = null;
  82. }
  83. }
  84. protected void ShowSelectionAdorner()
  85. {
  86. var adornerLayer = AdornerLayer.GetAdornerLayer(this);
  87. if (adornerLayer != null)
  88. {
  89. SelectionAdorner = CreateSelectionAdorner();
  90. SelectionAdorner.Visibility = Visibility.Visible;
  91. adornerLayer.Add(SelectionAdorner);
  92. }
  93. }
  94. protected abstract Adorner CreateSelectionAdorner();
  95. }
  96. }