Код: Выделить всё
private void Chart_OnUpdateFinished(IChartView chart)
{
OverlayCanvas.Children.Clear();
var polygon = new Polygon()
{
// set color, etc.
};
foreach (var point in points)
{
var pixel = Chart.ScaleDataToPixels(point);
polygon.Points.Add(new Point(pixel.X, pixel.Y));
}
OverlayCanvas.Children.Add(polygon);
}
< /code>
Это «сработало», но была задержка с обновлением Canvas, когда диаграмма обновляется. Такое ощущение, что должен быть способ использовать саму диаграмму, которая обрабатывает простое масштабирование и панорамирование.public class PolygonGeometry : DrawnGeometry, IDrawnElement
{
private readonly IEnumerable _points;
public PolygonGeometry(IEnumerable points)
{
_points = points;
}
public void Draw(SkiaSharpDrawingContext context)
{
using var path = new SKPath();
var first = true;
foreach (var pt in _points)
{
if (first)
{
path.MoveTo(pt);
first = false;
}
else
{
path.LineTo(pt);
}
}
path.Close();
context.Canvas.DrawPath(path, context.ActiveSkiaPaint);
}
public override LvcSize Measure()
{
return new();
}
}
{
private readonly PolygonGeometry _geometry;
public PolygonVisual(SKColor fillColor, IEnumerable points)
{
_geometry = new PolygonGeometry(points)
{
Fill = new SolidColorPaint(new SKColor(245, 40, 145, 200)),
Stroke = new SolidColorPaint(SKColors.Blue, 2)
};
}
protected override IDrawnElement DrawnElement => _geometry;
protected override void Measure(Chart chart)
{
// No scaling needed for absolute coordinates
}
}
< /code>
Ничего не появляется на графике в этом случае, но никаких исключений также не появляется. < /p>
Вот пример того, что я пытаюсь сделать. Существует зеленый поли, желтый поли и красный поли, который в этом случае покрывает всю диаграмму. На картинке все они начинаются с 0,0, но это не всегда всегда имеет место:
Подробнее здесь: https://stackoverflow.com/questions/797 ... sian-chart
Мобильная версия