我有一个WPF控件,该控件可以动态创建一些textBlocks并增加字体大小,直到textBlocks具有最大字体大小以适合父级为止。
我正在使用以下方法来获取具有特定fontSize的textBlock的大小:
private Size MeasureTextBlockSize(TextBlock textBlock)
{
// Measured Size is bounded to be less than maxSize
Size maxSize = new Size(double.PositiveInfinity, double.PositiveInfinity);
textBlock.Measure(maxSize);
return textBlock.DesiredSize;
}
在WPF中,一切都可以正常运行,但是当我在WinForm应用程序中使用控件时,文本将比其父项大。这意味着该方法无法正常工作。
我尝试了使用Labels的相同方法,但结果相同。
您是否知道为什么会发生这种情况或如何解决?
为了更好地理解我的问题,我将附加一些来自WPF和WinForm的图像:
这是WPF:
这是WinForm:
答案 0 :(得分:1)
您可以使用Graphics对象通过MeasureString()
方法来测量字符串:
private void Form1_Load(object sender, EventArgs e)
{
string testStr = "0#2" + Environment.NewLine
+ "1400" + Environment.NewLine
+ "800";
var rows = testStr.Split('\n');
// use graphics object to measure the string using MeasureString() method
Graphics g = this.CreateGraphics();
foreach (var row in rows)
{
var strSize = g.MeasureString(row, label1.Font);
Debug.WriteLine("text: {0} width: {1} height: {2}",row, strSize.Width.ToString(),strSize.Height.ToString());
}
}
输出:
文本:0#2宽度:22.56396高度:13.82519
文本:1400宽度: 28.86426高度:13.82519
文本:800宽度:22.56754高度:13.82519