在我的应用程序中,我必须绘制一条包含许多点的行(如果需要,最多可达100.000)。最初我使用的是折线,但对于大量的点来说,结果太慢了。
我一直在做一些阅读,然后来到DrawingVisual和StreamGeometry,但是它没有用。
我按照一个简单的教程创建了以下类:
class ConcentratieGrafiek : FrameworkElement
{
VisualCollection Visuals;
PointCollection PuntenCollectie;
public ConcentratieGrafiek(PointCollection Punten)
{
Visuals = new VisualCollection(this);
PuntenCollectie = Punten;
this.Loaded += new RoutedEventHandler(ConcentratieGrafiekLoaded);
}
void ConcentratieGrafiekLoaded(object sender, RoutedEventArgs e)
{
DrawingVisual Visual = new DrawingVisual();
StreamGeometry g = new StreamGeometry();
using (StreamGeometryContext cr = g.Open())
{
foreach (Point Punt in PuntenCollectie)
{
if (PuntenCollectie.IndexOf(Punt).Equals(0))
{
cr.BeginFigure(Punt, false, false);
}
else
{
cr.LineTo(Punt, false, false);
}
}
}
using (DrawingContext dc = Visual.RenderOpen())
{
Pen p = new Pen(Brushes.Black, 1);
dc.DrawGeometry(Brushes.Black, p, g);
}
Visuals.Add(Visual);
}
protected override Visual GetVisualChild(int index)
{
return Visuals[index];
}
protected override int VisualChildrenCount
{
get
{
return Visuals.Count;
}
}
}
我需要的线的所有点都在名为Punten的PointCollection中。然后我尝试使用。
将此FrameworkElement添加到我的Canvas中ActieveCanvas.Children.Add(new ConcentratieGrafiek(ConcentratiePunten) { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch });
“ActieveCanvas”是画布。
有关信息:所有点都是画布内(相对于)的X,Y坐标。
我做错了什么?
答案 0 :(得分:0)
通过更改以下内容来修复它
if (PuntenCollectie.IndexOf(Punt).Equals(0))
{
cr.BeginFigure(Punt, false, false);
}
else
{
cr.LineTo(Punt, false, false);
}
到
if (PuntenCollectie.IndexOf(Punt).Equals(0))
{
cr.BeginFigure(Punt, true, false);
}
else
{
cr.LineTo(Punt, true, false);
}