怎样获得字体的宽度

冰心的小屋 2010-04-15 10:28:55
<TextBlock Text = "全角、半角、中文字符、英文字符、符号">

文本字体(10-72)大小可变,有全角、半角、中文字符、英文字符、符号

我想获取每个字符所占的宽度,可行否?
...全文
205 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰心的小屋 2010-04-16
  • 打赏
  • 举报
回复
谢谢楼上的各位!我回去试试
jv9 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goldfire_001 的回复:]
方法多了。

WPF和Silverlight共同的方法。

C# code

TextBlock measureTextBlock = new TextBlock();
_measureTextBlock.FontFamily = target.FontFamily;
_measureTextBlock.FontSize = target.……
[/Quote]

1楼正解~
Goldfire_001 2010-04-16
  • 打赏
  • 举报
回复
方法多了。

WPF和Silverlight共同的方法。

TextBlock measureTextBlock = new TextBlock();
_measureTextBlock.FontFamily = target.FontFamily;
_measureTextBlock.FontSize = target.FontSize;
_measureTextBlock.FontStretch = target.FontStretch;
_measureTextBlock.FontStyle = target.FontStyle;
_measureTextBlock.FontWeight = target.FontWeight;
_measureTextBlock.UseLayoutRounding = target.UseLayoutRounding;
_measureTextBlock.Text = text;
_measureTextBlock.Measure(new Size(double.MaxValue, double.MaxValue));
return new Size(_measureTextBlock.ActualWidth, _measureTextBlock.ActualHeight);

这个是量全部target Control全部Text。

如果你要量单个的,搞个循环,把Text挨个塞进去就行了吧。

另外WPF的话可以试下这个

public class Helper
{
[DllImport("gdi32")]
private static extern bool GetTextExtentPoint32(IntPtr hdc, string lpString, int cbString, out Size lpSize);
[DllImport("gdi32")]
private static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
[DllImport("gdi32")]
private static extern IntPtr DeleteObject(IntPtr hDC);

public static Size MeasureTextWidth(System.Drawing.Graphics graphics, string text, System.Drawing.Font textFont)
{
IntPtr hdc = graphics.GetHdc();
IntPtr hFont = textFont.ToHfont();
SelectObject(hdc, hFont);
Size size = new Size();
GetTextExtentPoint32(hdc, text, text.Length, out size);
graphics.ReleaseHdc();
DeleteObject(hFont);
return size;
}

}



8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧