Tôi đã sử dụng TextRenderer
để Đo chiều dài của một chuỗi và do đó kích thước một điều khiển phù hợp. Có tương đương trong WPF hay tôi chỉ có thể sử dụng TextRendered.MeasureString
?WPF tương đương với TextRenderer
13
A
Trả lời
3
Hãy nhìn vào các FormattedText class
Nếu bạn cần kiểm soát chi tiết hơn, sau đó bạn cần phải đi xuống để AdvanceWidths viên kiểu GlyphTypeface của. Tìm thấy một similar discussion ở đây với đoạn mã trông giống như nó có thể hoạt động.
Cập nhật: Có vẻ như đây có thể trùng lặp với Measuring text in WPF .. OP vui lòng xác nhận.
18
Cảm ơn Gishu,
Reading liên kết của bạn tôi đã đưa ra những điều sau cả hai đều làm công việc cho tôi:
/// <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);
}
Các vấn đề liên quan
- 1. Java tương đương với WPF
- 2. WPF tương đương với margin-top?
- 3. WPF tương đương với Application.AddMessageFilter (Windows Forms)
- 4. Tương đương với "OnIdle" trong WPF
- 5. Tương đương với InvokeRequired trong WPF
- 6. WPF tương đương với ControlPaint.Light là gì?
- 7. WPF tương đương với thuộc tính AccesibleName
- 8. EndEdit tương đương trong WPF
- 9. BeginUpdate tương đương trong WPF?
- 10. Có tương đương WPF với trình thám hiểm DOM không?
- 11. Có tương đương MessageBox trong WPF không?
- 12. Sự kiện KeyPress tương đương trong WPF
- 13. Có tương đương WPF cho ToolStripButton không?
- 14. Tương đương TreeSet của Java tương đương với Python?
- 15. python tương đương tương đương
- 16. C# tương đương với shell_exec
- 17. MSVC tương đương với __builtin_popcount?
- 18. Python tương đương với find2perl
- 19. python tương đương với sed
- 20. Jackson tương đương với iPhone?
- 21. Double.doubleToLongBits tương đương với C#?
- 22. .net tương đương với htmlunit?
- 23. callgrind tương đương với java?
- 24. __LINE__ tương đương với Java?
- 25. find_by_sql tương đương với mongoid?
- 26. Video tương đương với PNG?
- 27. Mylyn tương đương với Netbeans?
- 28. Tương đương với Android java.awt.Dimension
- 29. AMD tương đương với NvOptimusEnablement
- 30. Java Tương đương với Reflection.Emit