简单的DrawingContext没有绘制到UI

时间:2015-12-15 15:25:25

标签: c# wpf xaml

我在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);

之前我已经绘制了简单的形状等

事实如果我定义一个Ellipse&如上所述,使用DrawingContext将它添加到画布我得到了我期望的结果。

我是否需要将绘图上下文添加到我控件中的面板中,还是有其他原因可以在UI中呈现原因?

1 个答案:

答案 0 :(得分:1)

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

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

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