2015-01-12 7 views
7

den folgenden Code Betrachten von einem Standard-System.Windows.Forms.FormLinearGradientBrush nicht korrekt dargestellt

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    Rectangle test = new Rectangle(50, 50, 100, 100); 
    using (LinearGradientBrush brush = new LinearGradientBrush(test, Color.Red, Color.Blue, 0f)) 
    { 
     e.Graphics.DrawRectangle(new Pen(brush, 8), test); 
    } 
} 

Es produziert dieses Ergebnis:

enter image description here

Warum in der falschen Reihenfolge zeigen die roten und blauen Linien und wie kann das behoben werden?

Antwort

2

Der Renderursprung ist das Problem. Sie fragen nach einer Pen, die 8px breit ist, und dass 8px als nach außen 4px in beiden Richtungen von der durch Ihr Rechteck definierten Linie definiert ist. Dies liegt an dem Standardwert Alignment=Center. Wenn Sie Pen auf Alignment=Inset setzen, werden Sie bessere Ergebnisse erzielen.

Sie diese Zeile, indem einfach diese zu Ihrem ursprünglichen Code sehen:

e.Graphics.DrawRectangle(Pens.White, test); 

Ihre Methode ändern, dies zu sein, und es wird funktionieren:

Rectangle test = new Rectangle(50, 50, 100, 100); 
using (LinearGradientBrush brush = new LinearGradientBrush(test, Color.Red, Color.Blue, 0f)) 
{ 
    using (var pen = new Pen(brush, 8f)) 
    { 
     pen.Alignment = PenAlignment.Inset; 
     e.Graphics.DrawRectangle(pen, test); 
    } 
} 
Verwandte Themen