J'ai utilisé TextRenderer
pour mesurer la longueur d'une chaîne et donc dimensionner un contrôle de manière appropriée. Existe-t-il un équivalent dans WPF ou puis-je simplement utiliser TextRendered.MeasureString
?WPF équivalent à TextRenderer
13
A
Répondre
3
Jetez un oeil à l'membre FormattedText class
Si vous avez besoin de contrôle plus granulaire, alors vous aurez besoin de descendre à AdvanceWidths du type GlyphTypeface. J'ai trouvé un similar discussion ici avec un extrait de code qui semble fonctionner.
Mise à jour: On dirait que cela peut être un double de Measuring text in WPF .. OP s'il vous plaît confirmer.
18
Merci Gishu,
Lecture de vos liens je suis venu avec ce qui suit les deux qui font le travail pour moi:
/// <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);
}
Questions connexes
- 1. Java équivalent à WPF
- 2. Image.FromHbitmap Équivalent WPF
- 3. Équivalent WPF de marge supérieure?
- 4. besoin équivalent Wpf de SystemInformation.DragSize
- 5. ControlTemplate.Triggers Équivalent WPF dans Silverlight 3
- 6. Java équivalent à pyftpdlib?
- 7. MSVC équivalent à '__builtin_return_address'
- 8. Java équivalent à
- 9. PHP à ASP.NET - call_user_func() équivalent?
- 10. C# C équivalent à l'union
- 11. Java équivalent à .NET System.Net.ServicePointManager
- 12. Qt équivalent à Win32 Fibers
- 13. Windows équivalent à ulimit -n
- 14. Rails équivalent pour MapPath (à partir d'ASP.NET)
- 15. Open source équivalent à l'accord de FiveRun '
- 16. Java équivalent à NotSupportedException de .Net
- 17. Groovy équivalent à l'instruction exec de Python?
- 18. SQL Server équivalent à NULLS FIRST d'Oracle?
- 19. équivalent à eval Unix dans Windows
- 20. PHP équivalent à ASP.NET/SharePoint Webparts?
- 21. ASP.NET MVC est équivalent à l'événement Login_Error?
- 22. MSVC équivalent à l'indicateur GCC '-include'?
- 23. équivalent Visual Studio à Delphi marque-pages
- 24. SQL équivalent à "using" pour les schémas?
- 25. Linq équivalent à SQL LIKE [a-f]
- 26. Android équivalent à iphone indexé UITableView
- 27. Schéma équivalent à Haskell où la clause
- 28. Objectif C équivalent à javascripts setTimeout?
- 29. C# équivalent à DigestUtils.md5Hex de Java (chaîne)?
- 30. Fournisseur d'extension pour WPF