2009-06-29 6 views
12

Ich bemerkte, dass beim Überschreiben der System.Windows.Window OnRender-Methode nicht auf den Bildschirm zeichnen kann. Ich bin mir sicher, dass es einen guten Grund dafür gibt, aber ich konnte die Erklärung nicht finden.Warum überschreibt das Überschreiben der WPF Window.OnRender-Methode nicht auf dem Bildschirm?

Der folgende Code zeigt dies:

using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media; 

namespace WpfApplication1 
{ 
    public partial class Window1 : Window 
    { 
     Pen pen = new Pen(); 

     public Window1() 
     { 
      InitializeComponent(); 
      pen.Brush = Brushes.Black; 
     } 

     protected override void OnRender(DrawingContext dc) 
     { 
      base.OnRender(dc); 
      dc.DrawRectangle(Brushes.Black, pen, new Rect(0, 0, 600, 400)); 
      dc.DrawEllipse(Brushes.Green, pen, new Point(300, 300), 50, 50); 
     } 
    } 
} 

die Zeichnungslogik in einem Framework ersetzt arbeiten (so ist das Element als Inhalt eines Fensters Einstellung) in Ordnung.

Dank,

Danny

Antwort

14

Die Antwort wird von Chales Petzold here gegeben.

Seine Antwort ist "weiß nicht warum", aber ein Kommentar schlägt richtig vor, dass die Einstellung des Hintergrunds des Fensters auf transparent den Fehler behebt.

+0

"weiß nicht warum" beantwortet die Frage nicht wirklich, und dieser Fix funktioniert nicht für ItemsControl-Derivate, die MVVM verwenden – user3690202

1

Ich denke, dass Grid dieses Problem erzeugt. Becouse standardmäßig Fenster enthält Rasterelement

4

Eigentlich malt sich das Fenster selbst, das unter anderem ein Rechteck für den Hintergrund ist. Alles, was im OnRender hinzugefügt wird, ist hinter dem Hintergrund. Machen Sie den Hintergrund transparent und man kann sehen, was dahinter steht.

Das habe ich zumindest bei Button und OnRender herausgefunden. Wenn ich nur innerhalb des Buttons zeichne, ist nichts zu sehen, da der Button darüber gezogen wird. Wenn die Zeichnung jedoch über die Schaltflächengrenzen hinausreicht, kann etwas außerhalb gesehen werden.

enter image description here

Hier eine leere Schaltfläche über einen gelben Hintergrund gezeichnet. Im OnRender zeichne ich 2 schwarze Linien, die ein Kreuz bilden. Aber nur die Teile der Linie außerhalb des Knopfes können gesehen werden.

Sehr seltsames Verhalten von OnRender, in der Tat!

Verwandte Themen