namespace System.Windows.Forms { public class ToolStrip : Control { protected new CustomControls.ToolStrip control { get; } public ToolStripItemCollection Items { get; } private ImageList imageList; public ImageList ImageList { get => imageList; set { imageList = value; ResetImages(); } } public System.Drawing.Size ImageScalingSize { get; set; } // TODO? public ToolStripGripStyle GripStyle { get => control.GripVisible ? ToolStripGripStyle.Visible : ToolStripGripStyle.Hidden; set => control.GripVisible = value == ToolStripGripStyle.Visible; } private ToolStripRenderer renderer; public ToolStripRenderer Renderer { get => renderer; set { renderer = value; ApplyStyle(); } } public bool ShowItemToolTips { get; set; } // TODO? public override DockStyle Dock { get => base.Dock; set { base.Dock = value; control.Vertical = value == DockStyle.Left || value == DockStyle.Right; } } public override string Text { get; set; } // not in SWF public Padding BorderThickness { get => new Padding((int)control.BorderThickness.Left, (int)control.BorderThickness.Top, (int)control.BorderThickness.Right, (int)control.BorderThickness.Bottom); set => control.BorderThickness = new Thickness(value.Left, value.Top, value.Right, value.Bottom); } internal bool Vertical => control.Vertical; private void SetupThumbDrag(System.Windows.Controls.Primitives.Thumb thumb) { if (thumb == null) return; var pt = new Point(0, 0); bool dragMode = false; thumb.PreviewMouseDown += (s, e) => { pt = e.GetPosition(thumb); }; thumb.PreviewMouseMove += (s, e) => { if (e.LeftButton == Input.MouseButtonState.Pressed) { var pt1 = e.GetPosition(thumb); if (!dragMode && Math.Sqrt((pt1.X - pt.X) * (pt1.X - pt.X) + (pt1.Y - pt.Y) * (pt1.Y - pt.Y)) > 5) { dragMode = true; BringToFront(); } if (dragMode) { Left += (int)(pt1.X - pt.X) * (control.FlowDirection == FlowDirection.RightToLeft ? -1 : 1); Top += (int)(pt1.Y - pt.Y); OnDragOver(null); } } }; thumb.PreviewMouseUp += (s, e) => { if (dragMode) OnDragDrop(null); dragMode = false; }; } internal protected virtual void ApplyStyle(ToolStripProfessionalRenderer r) { control.BorderBrush = r.ToolBarBorder; control.Resources["ToolBarHorizontalBackground"] = r.ToolBarHorizontalBackground; control.Resources["ToolBarVerticalBackground"] = r.ToolBarVerticalBackground; control.Resources["ToolBarGripDark"] = r.ToolBarGripDark; control.Resources["ToolBarGripLight"] = r.ToolBarGripLight; } internal void ApplyStyle() { if (Renderer is ToolStripProfessionalRenderer pr) { ApplyStyle(pr); foreach (ToolStripItem item in Items) item.ApplyStyle(pr); } } internal void ResetImages() { foreach (ToolStripItem item in Items) item.ResetImage(); } internal override void AddChild(Control child) { control.Items.Add(child.control); } internal override void RemoveChild(Control child) { control.Items.Remove(child.control); } internal override void SetChildIndex(Control child, int index) { control.Items.Insert(index, child.control); } public ToolStrip() { control = new(); SetControl(control); control.Loaded += (s, e) => { var thumb = control.Template.FindName("ToolBarThumb", control) as System.Windows.Controls.Primitives.Thumb; SetupThumbDrag(thumb); }; control.BorderThickness = new Thickness(0,0,1,1); Items = new ToolStripItemCollection(this); Dock = DockStyle.Top; } } }