He usado TextRenderer
para medir la longitud de una cadena y, por lo tanto, ajustar el tamaño de un control de forma adecuada. ¿Hay un equivalente en WPF o puedo simplemente usar TextRendered.MeasureString
?WPF equivalente a TextRenderer
13
A
Respuesta
3
Tome un vistazo a la FormattedText class
Si necesita un control más granular, a continuación, que había necesidad de descender al miembro del tipo GlyphTypeface AdvanceWidths. Encontré un similar discussion aquí con un fragmento de código que parece que podría funcionar.
Actualización: Parece que esto puede ser un duplicado de Measuring text in WPF .. OP confirmar.
18
Gracias Gishu,
lectura de sus enlaces que se le ocurrió la siguiente ambos de los cuales hacer el trabajo para mí:
/// <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);
}
Cuestiones relacionadas
- 1. Equivalente a InvokeRequired en WPF
- 2. WPF equivalente a Silverlight "RootVisual"
- 3. WPF equivalente a Application.AddMessageFilter (Windows Forms)
- 4. ¿Hay un WPF equivalente a System.Windows.Forms.Screen?
- 5. Silverlight 4 Equivalente a WPF "x: estático"
- 6. equivalente CreateGraphics en wpf
- 7. equivalente Java WPF
- 8. EndEdit equivalente en WPF
- 9. Application.ProductName equivalente en WPF?
- 10. ¿Cuál es el equivalente a "OnIdle" en WPF
- 11. Equivalente a una propiedad de vista de clave en WPF
- 12. ¿Hay un WPF equivalente a un explorador DOM?
- 13. ¿Cuál es el equivalente de WPF a ControlPaint.Light?
- 14. Cómo aplicar la escala de gráficos y traducir al TextRenderer
- 15. cómo obtener los márgenes del texto exacto utilizado por TextRenderer
- 16. ¿Hay un equivalente de MessageBox en WPF?
- 17. Agregar hipervínculo a WPF WPF
- 18. pitón equivalente a sed
- 19. JodaTime equivalente a DateUtils.truncate()
- 20. Python equivalente a find2perl
- 21. equivalente comprobado a IllegalArgumentException?
- 22. MSVC equivalente a __builtin_popcount?
- 23. Flecha equivalente a mapM?
- 24. MVC Equivalente a Page_Load
- 25. Equivalente a 'este' puntero
- 26. C# equivalente a shell_exec
- 27. Haskell equivalente a Boost.Fusion
- 28. Java equivalente a app.config?
- 29. C# equivalente a InStrRev
- 30. Lua equivalente a shlex?