private void DrawBars(SKCanvas canvas, SKRect frame, SKRect chart) { var itemWidth = (MaxItems >= 12 ? chart.GetItemWidth(MaxItems) : chart.GetItemWidth(12)) / 2; var count = ChartEntries.Count(x => x.IsVisible); // Regular bar width var barWidth = (itemWidth / count) - 10; // Selected bar width var selectedValueItems = ChartEntries.GetChartValueItemFromX(chart.GetInsideXValue(TouchedPoint.X), chart, MaxItems, false); var selectedTags = selectedValueItems?.Select(x => x.ChartValueItem.Tag); int index = 0; foreach (var item in ChartEntries.Where(x => x.IsVisible)) { foreach (var valueItem in item.Items.Where(x => selectedTags?.Contains(x.Tag) != true)) { // Draw not selected bars // canvas.DrawBar( valueItem.Point.X, valueItem.Point.Y, chart.Bottom, barWidth, BarMargin, count, index, IsSliderVisible ? item.Color.ToSKColor().AsTransparency() : item.Color.ToSKColor(), item.UseDashedEffect); } index++; } if (!IsSliderVisible) { return; } count = selectedValueItems?.Count() ?? 1; barWidth = (itemWidth / selectedValueItems?.Count() ?? 1) + 10; index = 0; foreach (var item in ChartEntries.Where(x => x.IsVisible)) { var valueItems = item.Items.Where(x => selectedTags?.Contains(x.Tag) == true); if (valueItems?.Any() != true) { continue; } foreach (var valueItem in valueItems) { canvas.DrawBar( valueItem.Point.X, valueItem.Point.Y, chart.Bottom, barWidth, BarMargin, count, index, item.Color.ToSKColor(), item.UseDashedEffect); string text = Math.Round(double.Parse(valueItem.Value.ToString()), 0, MidpointRounding.AwayFromZero).ToString() + " " + this.VerticalUnit; canvas.DrawSliderValue( text, frame.GetInsideXValue(valueItem.Point.X), frame.Top, SliderDetailTextSize, SKColors.White, item.Color.ToSKColor(), SliderDetailPadding, SliderDetailMargin, MaxValue + " " + this.VerticalUnit, selectedValueItems.Count, index, SliderDetailOrientation, frame, item.UseDashedEffect); } index++; } float hintX = selectedValueItems?.FirstOrDefault()?.ChartValueItem?.Point.X ?? 0; float hintY = selectedValueItems?.OrderByDescending(x => x.ChartValueItem.Point.Y)?.FirstOrDefault()?.ChartValueItem?.Point.Y ?? 0; if (hintX != 0 && hintY != 0) { DrawDragHintGraphic( canvas, hintX, hintY + ((frame.Bottom - hintY) / 2), (barWidth * count), frame); } }