Программное измерение текстовой строки в пикселях для Silverlight

В WPF есть FormattedText в пространстве имен System.Windows.Media MSDN FormattedText, который я могу использовать следующим образом:

private static Size GetTextSize(string txt, string font, int size, bool isBold)
{
   Typeface tf = new Typeface(new System.Windows.Media.FontFamily(font),
                             FontStyles.Normal,
                             (isBold) ? FontWeights.Bold : FontWeights.Normal,
                             FontStretches.Normal);
   FormattedText ft = new FormattedText(txt, new CultureInfo("en-us"), System.Windows.FlowDirection.LeftToRight, tf, (double)size, System.Windows.Media.Brushes.Black, null, TextFormattingMode.Display);
   return new Size { Width = ft.WidthIncludingTrailingWhitespace, Height = ft.Height };
}

Есть ли в Silverlight хороший подход к получению ширины в пикселях (на данный момент высота не важна), помимо вызова сервера?


person AlignedDev    schedule 04.02.2011    source источник


Ответы (1)


Подход, который я видел, может не работать в вашем конкретном случае, заключается в том, чтобы поместить текст в нестилизованный TextBlock, а затем получить ширину этого элемента управления, например:

private double GetTextWidth(string text, int fontSize)
{
    TextBlock txtMeasure = new TextBlock();
    txtMeasure.FontSize = fontSize;
    txtMeasure.Text = text;
    double width = txtMeasure.ActualWidth;
    return width;
}

Это взлом, без сомнения.

person Ken Smith    schedule 04.02.2011
comment
+1, но не забудьте отменить меру и расположить перед получением фактической ширины. - person Dr. Andrew Burnett-Thompson; 19.06.2012
comment
К сожалению, это решение имеет небольшие поля выше и ниже фактического текста. - person Clément; 12.01.2014