A kirajzolást a Form hátterére végezzük el, így a Paint eseményt használhatjuk fel a rajzoláshoz. A színátmenethez szükséges két színt két globális változóban (FStartColor, FEndColor) tároljuk, melyeket meg is tudunk változtatni futási időben egy ColorDialog komponens segítségével.
protected void Form1_Paint (object sender, System.WinForms.PaintEventArgs e)
{
Graphics g = e.Graphics;
Kirajzolás előtt létre kell hoznunk a szükséges ecsetet, melyhez a LinearGradientBrush osztályból kell egy példányt létrehozni. Itt első paraméterként meg kell adnunk azt a téglalapot, melyen belül a színátmenetet megvalósítjuk. Ez a téglalap nem függ össze a majdan kirajzolandó grafikával, csak meghatározza annak befoglaló téglalap méretét, ettől a grafikánk még tetszőleges alakú lehet. Második és harmadik paraméterbe jön az a két szín, mely között a színátmenet megvalósul. Negyedik paraméterbe egy szög értéket adhatunk meg fokban. A színátmenet iránya ettől a szögtől függ.
LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, FStartColor, FEndColor, trackBar3.Value);
Arra is van lehetőségünk, hogy a két szín ne azonos arányban legyen jelen a színátmenetben. Ehhez a Blend property-t kell felhasználnunk, mely egy Blend osztályt vár. Itt a Factors és Positions property-ken keresztül adható meg a két szín aránya nulla és egy közötti értékben, melyekhez a példaprogram trackBar1 és trackBar2 kontrollja szolgáltatja az értéket.
Blend b = new Blend(1);
b.Factors[0] = (float)trackBar1.Value / 100;
b.Positions[0] = (float)trackBar2.Value / 100;
brush.Blend = b;
A SetBlendTriangularShape függvény hívásával azt is elérhetjük, hogy a két szín három legyen. Tesszük ezt úgy, hogy a színátmenet elindul a kezdő színből, majd átmegy a végsőbe és utána ismét visszamegy a kezdőszínbe. Ennek mértékét a függvény első paraméterében adhatjuk meg, míg a másodikban a végső szín erőssége határozható meg. Mindkét szám 0 és 1 közötti kell, hogy legyen.
brush.SetBlendTriangularShape((float)trackBar4.Value / 100, (float)trackBar5.Value / 100);
Ezek után már nem marad más, mint egy grafikai objektum kirajzolása, mely jelen esetben egy ellipszis lesz.
g.FillEllipse(brush, 0, 0, ClientSize.Width, ClientSize.Height);
g.DrawEllipse(new Pen(Color.Black, 2), ClientRectangle);
Lehetőségünk van arra is, hogy a létrehozott színátmenetet menet közben további szög értékkel elforgassuk. Ehhez a RotateTransform függvény hívása szükséges, melynek paraméterében megadható az elforgatás mértéke fokban.
brush.RotateTransform(180);
…
}