public void Draw() { drawXOffset = 0; drawYOffset = (int)canvasTracing.ActualHeight / 2; drawXMultiplier = (int)canvasTracing.ActualWidth / wfStrip.lengthSeconds; drawYMultiplier = -(int)canvasTracing.ActualHeight / 2; if (wfStrip.Points.Count < 2) { return; } wfStrip.RemoveNull(); wfStrip.Sort(); drawPath = new Path { Stroke = drawBrush, StrokeThickness = 1 }; drawGeometry = new StreamGeometry { FillRule = FillRule.EvenOdd }; using (drawContext = drawGeometry.Open()) { drawContext.BeginFigure(new System.Windows.Point( (int)(wfStrip.Points [0].X * drawXMultiplier) + drawXOffset, (int)(wfStrip.Points [0].Y * drawYMultiplier) + drawYOffset), true, false); for (int i = 1; i < wfStrip.Points.Count; i++) { if (wfStrip.Points [i].X > wfStrip.lengthSeconds * 2) { continue; } drawContext.LineTo(new System.Windows.Point( (int)(wfStrip.Points [i].X * drawXMultiplier) + drawXOffset, (int)(wfStrip.Points [i].Y * drawYMultiplier) + drawYOffset), true, true); } } drawGeometry.Freeze(); drawPath.Data = drawGeometry; canvasTracing.Children.Clear(); canvasTracing.Children.Add(drawPath); }