namespace System.Windows.Forms { public class ScrollBar : Control { protected new System.Windows.Controls.Primitives.ScrollBar control { get; } public int LargeChange { get => (int)control.LargeChange; set { control.LargeChange = value; control.ViewportSize = value; UpdateMaximum(); } } private int maximum; public int Maximum { get => maximum; set { maximum = value; UpdateMaximum(); } } public int Minimum { get => (int)control.Minimum; set => control.Minimum = value; } public int SmallChange { get => (int)control.SmallChange; set => control.SmallChange = value; } public int Value { get => (int)control.Value; set => control.Value = value; } public event ScrollEventHandler Scroll; public event EventHandler ValueChanged; private void UpdateMaximum() { control.Maximum = maximum - control.ViewportSize; } protected virtual void OnScroll(ScrollEventArgs e) => Scroll?.Invoke(this, e); protected virtual void OnValueChanged(EventArgs e) => ValueChanged?.Invoke(this, e); public ScrollBar() { control = new(); SetControl(control); control.Scroll += (s, e) => OnScroll(Helper.GetScrollEventArgs(e, control.Orientation == Windows.Controls.Orientation.Horizontal)); control.ValueChanged += (s, e) => OnValueChanged(e); } } }