我在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中呈现原因?
答案 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
。您使用此技术可能遇到的唯一潜在问题是,您的绘图将显示在后面用户控件中包含的所有其他控件。