public static void OnChartPointsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { WindChartControl charControl = d as WindChartControl; GeometryGroup myGeometryGroup = new GeometryGroup(); var values = e.NewValue as List <IChartPoint>; double radius = 0; double lineRadius = charControl.DrawCanvas.ActualWidth / 2; double radiusStep = lineRadius / values.Count; // The center double lastX = (double)(charControl.DrawCanvas.ActualWidth / 2.0); double lastY = (double)(charControl.DrawCanvas.ActualHeight / 2.0); foreach (var value in values) { radius += radiusStep; double pointOffsetX = (charControl.DrawCanvas.ActualWidth - 2.0 * radius) / 2.0; double pointOffsetY = (charControl.DrawCanvas.ActualHeight - 2.0 * radius) / 2.0; double circleX = Math.Cos(GetAngleInRadian(value)) * radius; double circleY = Math.Sin(GetAngleInRadian(value)) * radius; float x = (float)(pointOffsetX + radius - circleX); float y = (float)(pointOffsetY + radius - circleY); myGeometryGroup.Children.Add(new LineGeometry() { StartPoint = new Point(lastX, lastY), EndPoint = new Point(x, y) }); lastX = x; lastY = y; } (d as WindChartControl).LinePath.Data = myGeometryGroup; }