2009-06-29 16 views
12

Ho notato che quando si sovrascrive il metodo System.Windows.Window OnRender non riesce a disegnare sullo schermo. Sono sicuro che c'è una buona ragione per questo, ma non sono riuscito a trovare la spiegazione.Perché sovrascrive la finestra di WPF. Il metodo Onender non riesce a disegnare sullo schermo?

Il codice seguente dimostra questo:

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); 
     } 
    } 
} 

sostituendo la logica disegno in un FrameworkElement (quindi impostando l'elemento come il contenuto di una finestra) funziona bene.

grazie,

Danny

risposta

14

La risposta è data da Chales Petzold here.

La sua risposta è "non so perché", tuttavia un commento suggerisce correttamente che l'impostazione dello sfondo della finestra su trasparente risolva il problema.

+0

"non so perché" in realtà non risponde alla domanda e questa correzione non funziona per i derivati ​​ItemsControl che utilizzano MVVM – user3690202

1

Penso che Grid possa generare questo problema. Siccome per impostazione predefinita la finestra contiene l'elemento Grid

4

In realtà, la finestra si dipinge da sola, che tra l'altro è un rettangolo per lo sfondo. Tutto ciò che viene aggiunto in OnRender è dietro lo sfondo. Rendi trasparente lo sfondo e puoi vedere cosa c'è dietro.

Almeno questo è quello che ho scoperto usando Button e OnRender. Se disegno solo all'interno del pulsante, non è possibile vedere nulla, perché il pulsante è disegnato su di esso. Ma se il disegno si estende oltre i limiti del pulsante, si può vedere qualsiasi cosa all'esterno.

enter image description here

Qui un pulsante vuoto è disegnato su uno sfondo giallo. In OnRender, disegno 2 linee nere che formano una croce. Ma solo le parti della linea al di fuori del pulsante possono essere viste.

Comportamento molto strano di OnRender, infatti!

Problemi correlati