2009-06-29 107 views
12

我注意到當重寫System.Windows.Window時,OnRender方法無法繪製到屏幕上。我確信這有一個很好的理由,但無法找到解釋。爲什麼重寫WPF Window.OnRender方法無法繪製到屏幕?

下面的代碼說明了這一點:

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

替換圖邏輯在FrameworkElement的(然後設定元件作爲窗口的內容)很好地工作。

感謝,

丹尼

回答

14

答案由Chales彼佐爾德here給出。

他的回答是'不知道爲什麼',但是一條評論正確地表明將窗口背景設置爲透明可以修復該錯誤。

+0

「不知道爲什麼」並不真正回答這個問題,並且此修補程序不適用於使用MVVM的ItemsControl衍生產品 – user3690202 2016-11-25 19:59:40

1

我想,那個Grid會產生這個問題。默認情況下,窗口包含網格元素

4

實際上,窗口繪製自己,其中包括背景的矩形。無論在OnRender中添加什麼,都在後臺背後。使背景透明,可以看到它背後的內容。

至少這是我使用Button和OnRender時發現的。如果我只在按鈕內繪製,則無法看到任何東西,因爲按鈕已經被繪製在它上面。但如果繪圖超出了按鈕邊界,可以看到任何外部的東西。

enter image description here

這裏的空按鈕上繪製黃色背景。在OnRender中,我繪製了兩條黑線構成一個十字。但只能看到按鈕外部的部分。

的確很奇怪的OnRender行爲!

相關問題