using System.Drawing; using System.Windows.Media; namespace System.Windows.Forms { public class ToolStripButton : ToolStripItem { private InnerButton button { get; } public bool Checked { get => button.Checked; set => button.Checked = value; } public bool CheckOnClick { get => button.CheckOnClick; set => button.CheckOnClick = value; } public CheckState CheckState { get => button.CheckState; set => button.CheckState = value; } public override System.Drawing.Size ImageSize { get => button.ImageSize; set => button.ImageSize = value; } public bool Vertical { get => button.Vertical; set => button.Vertical = value; } public event EventHandler CheckedChanged; protected virtual void OnCheckedChanged(EventArgs e) => CheckedChanged?.Invoke(this, e); public override void ApplyStyle(ToolStripProfessionalRenderer r) { var button = this.button.control; button.Foreground = r.Foreground; button.Resources["Button.Static.Background"] = r.ButtonStaticBackground; button.Resources["Button.Static.Border"] = r.ButtonStaticBorder; button.Resources["Button.MouseOver.Background"] = r.ButtonMouseOverBackground; button.Resources["Button.MouseOver.Border"] = r.ButtonMouseOverBorder; button.Resources["Button.Checked.Background"] = r.ButtonCheckedBackground; button.Resources["Button.Checked.Border"] = r.ButtonCheckedBorder; if (Parent?.Vertical ?? false) button.Margin = new Thickness(0, 0, 0, 3); } internal override void ResetImage() { base.ResetImage(); button.ImageSource = ImageSource; ResetAutoSizeValue(false); } protected override void UpdateText() { base.UpdateText(); button.Text = DisplayStyle == ToolStripItemDisplayStyle.None || DisplayStyle == ToolStripItemDisplayStyle.Image ? "" : Text; } public ToolStripButton() { button = new(); SetItemControl(button); button.CheckedChanged += (sender, e) => OnCheckedChanged(e); DisplayStyle = ToolStripItemDisplayStyle.ImageAndText; } public ToolStripButton(string text, Image image, EventHandler click) : this() { Text = text; Image = image; Click += click; } private class InnerButton : ToggleButtonBase { protected new CustomControls.ToolStripButton control { get; } public bool CheckOnClick { get => control.CheckOnClick; set => control.CheckOnClick = value; } public override string Text { get => control.Text; set => control.Text = value; } public ImageSource ImageSource { get => control.Image; set => control.Image = value; } public System.Drawing.Size ImageSize { get => new System.Drawing.Size((int)control.ImageWidth, (int)control.ImageHeight); set { control.ImageWidth = value.Width; control.ImageHeight = value.Height; } } public bool Vertical { get => control.IsVertical; set { control.IsVertical = value; control.VerticalAlignment = value ? VerticalAlignment.Stretch : VerticalAlignment.Center; } } public InnerButton() { control = new(); SetControl(control); } } } }