好吧,我难住了。为什么这不渲染正方形?(注意,我故意使用正负坐标,因此无论原点如何,它都会显示。不知道 x/y 是否反转等)
public partial class Main : Window
{
StreamGeometry _cueGeometry;
Brush _cueBrush;
Pen _cuePen;
public Main()
{
InitializeComponent();
_cueGeometry = new StreamGeometry();
using (var geometryContext = _cueGeometry.Open())
{
geometryContext.BeginFigure(new Point( 40, 40), true, true);
geometryContext.LineTo (new Point( 40,-40), true, true);
geometryContext.LineTo (new Point(-40,-40), true, true);
geometryContext.LineTo (new Point(-40, 40), true, true);
}
_cueGeometry.Freeze();
_cueBrush = Brushes.AliceBlue;
_cuePen = new Pen(Brushes.Gray, 1);
_cuePen.Freeze();
}
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
dc.DrawGeometry(_cueBrush, _cuePen, _cueGeometry);
}
}
更新
我注意到还有一些奇怪的事情。如果我将此代码移动到具有红色背景的 Panel 的子类中,它会呈现红色背景,然后呈现一个前面带有灰色边框的蓝色方块。(注意:它没有被剪裁到控件的边界,这就是我可以看到所有那个正方形的方式。)
但是,如果我只是将子类更改为 UserControl,则带有灰色边框的蓝色方块将呈现在红色控件的后面。(同样,我可以看到这一点,因为我禁用了剪辑。)
如果最终将其更改为 Control 的子类,我将不再获得红色背景,而只会获得带有灰色边框的蓝色方块。我认为这是因为 Control 自己不进行任何渲染,但仍然没有解释为什么背景颜色在 UserControl 而不是 Panel 中渲染在我的绘图上。我的猜测是模板中的某些元素出现在渲染的前面,但我想不出那会是什么。