好吧,我很困惑。为什么这不渲染广场?(请注意,我故意使用正坐标和负坐标,因此无论起点如何显示。
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);
}
}
更新
我注意到了其他奇怪的东西。如果我将此代码移至带有红色背景的一个子类,它会呈现红色背景,然后在其前面呈现带有灰色边框的蓝色正方形。(注意:它没有夹在控制的范围上,这就是我可以看到所有正方形的方式。)
但是,如果我只是将子类更改为Usercontrol,蓝色正方形的蓝色正方形在红色控件后面呈现。(同样,我可以看到这一点,因为我禁用了剪裁。)
如果最终将其更改为控制子类,我将不再获得红色背景,而唯一的获得带有灰色边框的蓝色正方形。我认为这是因为控件不会单独进行任何渲染,但仍然不能解释为什么背景颜色在用Usercontrol而不是面板中的usercontrol中呈现。我的猜测是,有一些模板的一部分出现在渲染内容的前面,但我想不到。
找到了它。窗口的默认模板在内容区域中具有不透明的白色背景,阻塞了渲染。使用史努比,我找到了边界,将可见性更改为"隐藏",并且可以肯定的是渲染路径。
神秘解决!
或简单地将窗口的Background
设置为Transparent
或{x:Null}
。