Я работаю над проектом, в котором мне нужно иметь дело с диаграммой StackedColumn, используя библиотеку Aspose.Slides. Для каждого столбца диаграммы есть соответствующее значение счетчика, и мне нужно отобразить его, как на этом примере слайда.
По сути, каждая метка должна отображаться симметрично середине ширины соответствующего столбца.
С 5 столбцами метки отображаются нормально, как в шаблоне. Однако, если их меньше, метки будут отображаться следующим образом.
Вот фрагмент кода, который отвечает за добавление точки данных для серии и добавление метки для каждой точки данных.
dataSeries.DataPoints.AddDataPointForBarSeries(itemValueCell);
dataSeries.Format.Fill.FillType = fillType;
dataSeries.Format.Fill.SolidFillColor.Color = fillColour;
dataSeries.ParentSeriesGroup.Overlap = 100;
dataSeries.ParentSeriesGroup.GapWidth = 75;
var counter = workbook.GetCell(index, rowIndex, 7, item.Counter);
dataSeries.DataPoints[index - 1].Label.ValueFromCell = itemNameCell;
slide.Shapes.AddAutoShape(ShapeType.Rectangle, startX + dataSeries.GapWidth / 4.0f + (index - 1) * dataSeries.GapWidth * 1.85f, startY, dataSeries.GapWidth / 2.0f, 20);
var label = ((AutoShape)slide.Shapes[slide.Shapes.Count() - 1]);
label.TextFrame.Text = counter.Value.ToString();
label.FillFormat.FillType = FillType.NoFill;
label.LineFormat.FillFormat.FillType = FillType.NoFill;
label.TextFrame.TextFrameFormat.CenterText = NullableBool.True;
label.TextFrame.TextFrameFormat.AutofitType = TextAutofitType.Normal;
label.TextFrame.Paragraphs[0].Portions[0].PortionFormat.FillFormat.FillType = FillType.Solid;
label.TextFrame.Paragraphs[0].Portions[0].PortionFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(0, 173, 219);
Я попытался получить ActualWidth каждой точки данных, но получил только нулевое значение. Похоже, что значение поля будет установлено только после того, как вся диаграмма (или, может быть, весь файл PowerPoint) будет визуализирована. Кто-нибудь знает, как получить динамическое значение ширины каждого столбца из кода (даже до его рендеринга)?