Я использовал TextRenderer
для измерения длины строки и, соответственно, для управления размером. Есть ли эквивалент в WPF или я могу просто использовать TextRendered.MeasureString
?WPF эквивалент TextRenderer
13
A
ответ
3
Посмотрите на FormattedText class
Если вам нужен более детальный контроль, то вам нужно сходить к AdvanceWidths члену типа-GlyphTypeface в. Найден similar discussion здесь с фрагментом кода, который выглядит так, как будто он может работать.
Обновление: Похоже, что это может быть дубликат Measuring text in WPF .. OP подтвердите пожалуйста.
18
Благодаря Gishu,
Чтение ссылок я придумал следующее оба из которых делают работу для меня:
/// <summary>
/// Get the required height and width of the specified text. Uses FortammedText
/// </summary>
public static Size MeasureTextSize(string text, FontFamily fontFamily, FontStyle fontStyle, FontWeight fontWeight, FontStretch fontStretch, double fontSize)
{
FormattedText ft = new FormattedText(text,
CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface(fontFamily, fontStyle, fontWeight, fontStretch),
fontSize,
Brushes.Black);
return new Size(ft.Width, ft.Height);
}
/// <summary>
/// Get the required height and width of the specified text. Uses Glyph's
/// </summary>
public static Size MeasureText(string text, FontFamily fontFamily, FontStyle fontStyle, FontWeight fontWeight, FontStretch fontStretch, double fontSize)
{
Typeface typeface = new Typeface(fontFamily, fontStyle, fontWeight, fontStretch);
GlyphTypeface glyphTypeface;
if(!typeface.TryGetGlyphTypeface(out glyphTypeface))
{
return MeasureTextSize(text, fontFamily, fontStyle, fontWeight, fontStretch, fontSize);
}
double totalWidth = 0;
double height = 0;
for (int n = 0; n < text.Length; n++)
{
ushort glyphIndex = glyphTypeface.CharacterToGlyphMap[text[n]];
double width = glyphTypeface.AdvanceWidths[glyphIndex] * fontSize;
double glyphHeight = glyphTypeface.AdvanceHeights[glyphIndex]*fontSize;
if(glyphHeight > height)
{
height = glyphHeight;
}
totalWidth += width;
}
return new Size(totalWidth, height);
}
Смежные вопросы
- 1. TextRenderer не тянет длинную строку
- 2. Поддерживается ли TextRenderer на CE?
- 3. Вращающийся текст с использованием Textrenderer
- 4. WPF эквивалент ActiveControl?
- 5. WPF эквивалент Silverlight «RootVisual»
- 6. EndEdit эквивалент в WPF
- 7. Image.FromHbitmap WPF-эквивалент
- 8. SelectionColor эквивалент в WPF
- 9. WPF-эквивалент свойства AccesibleName
- 10. WPF: ListViewItem эквивалент DataGrid
- 11. WPF эквивалент состояниям Flex
- 12. Java эквивалент WPF
- 13. WPF эквивалент margin-top?
- 14. BeginUpdate эквивалент в WPF?
- 15. PrintDialog.PrinterSettings эквивалент в WPF
- 16. Application.ProductName эквивалент в WPF?
- 17. Эквивалент WPF связывания синтаксис
- 18. WPF эквивалент LVS_EX_ONECLICKACTIVATE?
- 19. Что такое WPF-эквивалент ControlPaint.Light?
- 20. Эквивалент свойства keypreview в WPF
- 21. Wpf градиент Эквивалент CSS Gradient
- 22. Эквивалент WinForms ListView.FullRowSelect в WPF
- 23. Эквивалент WinForms ComboBox.DroppedDown в WPF
- 24. Как получить точные текстовые поля используются TextRenderer
- 25. Неверный рисунок TextRenderer после загрузки текстур
- 26. Есть ли эквивалент MessageBox в WPF?
- 27. WPF эквивалент «Control.CheckForIllegalCrossThreadCalls» в Windows Forms
- 28. WPF - ItemsSource эквивалент для таблицы в FlowDocument?
- 29. Scala: Эквивалент холста WPF и многоугольника
- 30. Java-эквивалент трехмерных функциональных возможностей WPF