<PackageReference Include="System.Drawing.Common" Version="10.0.0-rc.1.25451.107" />

SolidBrush

public sealed class SolidBrush : Brush, ISystemColorTracker
Defines a brush of a single color. Brushes are used to fill graphics shapes, such as rectangles, ellipses, pies, polygons, and paths. This class cannot be inherited.
using System.Drawing.Internal; using System.Runtime.CompilerServices; using Windows.Win32; using Windows.Win32.Graphics.Gdi; using Windows.Win32.Graphics.GdiPlus; namespace System.Drawing { public sealed class SolidBrush : Brush, ISystemColorTracker { private Color _color = Color.Empty; private bool _immutable; public unsafe Color Color { get { if (_color == Color.Empty) { ARGB argb = default(ARGB); PInvokeGdiPlus.GdipGetSolidFillColor((GpSolidFill*)base.NativeBrush, (uint*)(&argb)).ThrowIfFailed(); GC.KeepAlive(this); _color = argb; } return _color; } set { if (_immutable) throw new ArgumentException(System.SR.Format(System.SR.CantChangeImmutableObjects, "Brush")); if (_color != value) { Color color = _color; InternalSetColor(value); if (value.IsSystemColor && !color.IsSystemColor) SystemColorTracker.Add(this); } } } public unsafe SolidBrush(Color color) { _color = color; GpSolidFill* nativeBrushInternal = default(GpSolidFill*); PInvokeGdiPlus.GdipCreateSolidFill((ARGB)ref _color, &nativeBrushInternal).ThrowIfFailed(); SetNativeBrushInternal((GpBrush*)nativeBrushInternal); if (_color.IsSystemColor) SystemColorTracker.Add(this); } internal SolidBrush(Color color, bool immutable) : this(color) { _immutable = immutable; } internal unsafe SolidBrush(GpSolidFill* nativeBrush) { SetNativeBrushInternal((GpBrush*)nativeBrush); } [NullableContext(1)] public unsafe override object Clone() { GpBrush* nativeBrush = default(GpBrush*); PInvokeGdiPlus.GdipCloneBrush(base.NativeBrush, &nativeBrush).ThrowIfFailed(); GC.KeepAlive(this); return new SolidBrush((GpSolidFill*)nativeBrush); } protected override void Dispose(bool disposing) { if (!disposing) _immutable = false; else if (_immutable) { throw new ArgumentException(System.SR.Format(System.SR.CantChangeImmutableObjects, "Brush")); } base.Dispose(disposing); } private unsafe void InternalSetColor(Color value) { PInvokeGdiPlus.GdipSetSolidFillColor((GpSolidFill*)base.NativeBrush, (ARGB)ref value).ThrowIfFailed(); GC.KeepAlive(this); _color = value; } unsafe void ISystemColorTracker.OnSystemColorChanged() { if (base.NativeBrush != null) InternalSetColor(_color); } } }