我注意到,当覆盖System.Windows.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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
替换FrameworkElement中的绘图逻辑(然后将元素设置为窗口的内容)工作正常.
谢谢,
丹尼
实际上,Window 会绘制自己,其中包括一个矩形作为背景。在 OnRender 中添加的任何内容都在后台。使背景透明,人们可以看到它背后的东西。
至少这是我在使用 Button 和 OnRender 时发现的。如果我只在按钮内绘制,则什么也看不到,因为按钮是在它上面绘制的。但是如果绘图超出按钮边界,则可以看到外面的任何东西。
这里在黄色背景上绘制了一个空按钮。在 OnRender 中,我画了 2 条黑线形成一个十字。但只能看到按钮外的线条部分。
OnRender 非常奇怪的行为,确实!