2011-02-04 6 views
17

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

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 к получению ширина в пикселях (на данный момент высота не важна), кроме звонка на сервер?

ответ

29

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

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

Это, конечно, взлом.

+0

+1, но не забудьте сделать недействительную меру и договориться, прежде чем получить фактическую ширину. –

+0

К сожалению, это решение имеет небольшие поля над и под фактическим текстом. –