2009-06-29 115 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行为!

相关问题