ToolStrip.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. namespace System.Windows.Forms
  2. {
  3. public class ToolStrip : Control
  4. {
  5. protected new CustomControls.ToolStrip control { get; }
  6. public ToolStripItemCollection Items { get; }
  7. private ImageList imageList;
  8. public ImageList ImageList
  9. {
  10. get => imageList;
  11. set
  12. {
  13. imageList = value;
  14. ResetImages();
  15. }
  16. }
  17. public System.Drawing.Size ImageScalingSize { get; set; } // TODO?
  18. public ToolStripGripStyle GripStyle
  19. {
  20. get => control.GripVisible ? ToolStripGripStyle.Visible : ToolStripGripStyle.Hidden;
  21. set => control.GripVisible = value == ToolStripGripStyle.Visible;
  22. }
  23. private ToolStripRenderer renderer;
  24. public ToolStripRenderer Renderer
  25. {
  26. get => renderer;
  27. set
  28. {
  29. renderer = value;
  30. ApplyStyle();
  31. }
  32. }
  33. public bool ShowItemToolTips { get; set; } // TODO?
  34. public override DockStyle Dock
  35. {
  36. get => base.Dock;
  37. set
  38. {
  39. base.Dock = value;
  40. control.Vertical = value == DockStyle.Left || value == DockStyle.Right;
  41. }
  42. }
  43. public override string Text { get; set; }
  44. // not in SWF
  45. public Padding BorderThickness
  46. {
  47. get => new Padding((int)control.BorderThickness.Left, (int)control.BorderThickness.Top, (int)control.BorderThickness.Right, (int)control.BorderThickness.Bottom);
  48. set => control.BorderThickness = new Thickness(value.Left, value.Top, value.Right, value.Bottom);
  49. }
  50. internal bool Vertical => control.Vertical;
  51. private void SetupThumbDrag(System.Windows.Controls.Primitives.Thumb thumb)
  52. {
  53. if (thumb == null)
  54. return;
  55. var pt = new Point(0, 0);
  56. bool dragMode = false;
  57. thumb.PreviewMouseDown += (s, e) =>
  58. {
  59. pt = e.GetPosition(thumb);
  60. };
  61. thumb.PreviewMouseMove += (s, e) =>
  62. {
  63. if (e.LeftButton == Input.MouseButtonState.Pressed)
  64. {
  65. var pt1 = e.GetPosition(thumb);
  66. if (!dragMode && Math.Sqrt((pt1.X - pt.X) * (pt1.X - pt.X) + (pt1.Y - pt.Y) * (pt1.Y - pt.Y)) > 5)
  67. {
  68. dragMode = true;
  69. BringToFront();
  70. }
  71. if (dragMode)
  72. {
  73. Left += (int)(pt1.X - pt.X) * (control.FlowDirection == FlowDirection.RightToLeft ? -1 : 1);
  74. Top += (int)(pt1.Y - pt.Y);
  75. OnDragOver(null);
  76. }
  77. }
  78. };
  79. thumb.PreviewMouseUp += (s, e) =>
  80. {
  81. if (dragMode)
  82. OnDragDrop(null);
  83. dragMode = false;
  84. };
  85. }
  86. internal protected virtual void ApplyStyle(ToolStripProfessionalRenderer r)
  87. {
  88. control.BorderBrush = r.ToolBarBorder;
  89. control.Resources["ToolBarHorizontalBackground"] = r.ToolBarHorizontalBackground;
  90. control.Resources["ToolBarVerticalBackground"] = r.ToolBarVerticalBackground;
  91. control.Resources["ToolBarGripDark"] = r.ToolBarGripDark;
  92. control.Resources["ToolBarGripLight"] = r.ToolBarGripLight;
  93. }
  94. internal void ApplyStyle()
  95. {
  96. if (Renderer is ToolStripProfessionalRenderer pr)
  97. {
  98. ApplyStyle(pr);
  99. foreach (ToolStripItem item in Items)
  100. item.ApplyStyle(pr);
  101. }
  102. }
  103. internal void ResetImages()
  104. {
  105. foreach (ToolStripItem item in Items)
  106. item.ResetImage();
  107. }
  108. internal override void AddChild(Control child)
  109. {
  110. control.Items.Add(child.control);
  111. }
  112. internal override void RemoveChild(Control child)
  113. {
  114. control.Items.Remove(child.control);
  115. }
  116. internal override void SetChildIndex(Control child, int index)
  117. {
  118. control.Items.Insert(index, child.control);
  119. }
  120. public ToolStrip()
  121. {
  122. control = new();
  123. SetControl(control);
  124. control.Loaded += (s, e) =>
  125. {
  126. var thumb = control.Template.FindName("ToolBarThumb", control) as System.Windows.Controls.Primitives.Thumb;
  127. SetupThumbDrag(thumb);
  128. };
  129. control.BorderThickness = new Thickness(0,0,1,1);
  130. Items = new ToolStripItemCollection(this);
  131. Dock = DockStyle.Top;
  132. }
  133. }
  134. }