Как получить динамическую ширину столбца в диаграмме StackedColumn

Я работаю над проектом, в котором мне нужно иметь дело с диаграммой StackedColumn, используя библиотеку Aspose.Slides. Для каждого столбца диаграммы есть соответствующее значение счетчика, и мне нужно отобразить его, как на этом примере слайда.

Шаблон

По сути, каждая метка должна отображаться симметрично середине ширины соответствующего столбца.

Правильное расположение ярлыка

С 5 столбцами метки отображаются нормально, как в шаблоне. Однако, если их меньше, метки будут отображаться следующим образом.

С 4 столбцами С 2 столбцами

Вот фрагмент кода, который отвечает за добавление точки данных для серии и добавление метки для каждой точки данных.

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) будет визуализирована. Кто-нибудь знает, как получить динамическое значение ширины каждого столбца из кода (даже до его рендеринга)?


person Anthony    schedule 11.12.2019    source источник


Ответы (1)


Неважно. Я получил ответ сам. Просто вызовите это, прежде чем получить фактическую ширину.

chart.validateChartLayout();
person Anthony    schedule 12.12.2019