为什么这个非常基本的 StreamGeometry(一个正方形)没有在 Windows 的 OnRender 中渲染?



好吧,我很困惑。为什么这不渲染广场?(请注意,我故意使用正坐标和负坐标,因此无论起点如何显示。

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}

相关内容

  • 没有找到相关文章

最新更新