После того, как вы инициализировали FormattedText, он имеет члены Width и Height, которые равны его фактическому отображаемому размеру с учетом его параметров. Фактически, изменение параметров обновляет их немедленно, например,:
FormattedText ft = new FormattedText(cellString, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, fontFace, fontSize, fontBrush);
ft.Trimming = TextTrimming.CharacterEllipsis;
double originalHeight = ft.Height;
double width = ft.Width;
ft.MaxTextWidth = bCellRect.Width; // Set the width to get a new height
double height = ft.Height;
Редактировать для GlyphRun: Когда вы создали свой GlyphRun, вы уже дали ему ширину продвижения для каждого символа, поэтому вы добавляете их для ширины. Чтобы получить высоту, используйте GlyphTypeface.Baseline * FontSize