Simple DrawingContext未绘制到UI

本文关键字:UI 绘制 DrawingContext Simple | 更新日期: 2023-09-27 18:26:56

我有一个RenderChart方法,它封装在UserControl的代码后面,有望在地图上绘制一些图表。我简化了方法,试图获得一些文本渲染,但没有成功:

 private void RenderChart()
    {
        DrawingVisual newVisual = new DrawingVisual();
        using (DrawingContext dc = newVisual.RenderOpen())
        {
           Rect rect = new Rect(new Point(160, 100), new System.Windows.Size(320, 80));
                dc.DrawRectangle(Brushes.Maroon, (Pen)null, rect);
                dc.Close();          
        }
        if (this.visual != null)
        {
            this.RemoveVisualChild(this.visual);
        }              
        this.AddVisualChild(newVisual);
        this.visual = newVisual;
        this.RefreshMargin();
    }

每当我在使用myCanvas.Children.Add(myEllipse); 之前画过简单的形状等时

事实如果我定义了一个椭圆&如上所述,在不使用DrawingContext的情况下将其添加到画布中,我得到了预期的结果。

我是否需要将绘图上下文添加到控件中的面板中,或者是否有其他原因导致它不会在UI中渲染?

Simple DrawingContext未绘制到UI

UserControl类最终派生自一个名为UIElement的类,该类定义了一个虚拟OnRender方法,您可以重写该方法以在控件上"绘制"(正如Clemens在问题注释中所建议的那样)。以下示例将绘制一个与用户控件大小相同的蓝色矩形:

protected override void OnRender(DrawingContext dc)
{
    dc.DrawRectangle(Brushes.Blue, null, new Rect(0, 0, ActualWidth, ActualHeight));
}

我建议重写OnRender是更传统的方法,而不是尝试使用DrawingVisual。使用此技术可能遇到的唯一潜在问题是,图形将显示在用户控件中包含的所有其他控件后面。