wpf - 在 WinForm 中获取 textBlock 的正确宽度
问题描述
我有一个 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 应用程序中使用控件时,文本将大于其父级。这意味着该方法无法正常工作。
我尝试了与标签相同的方法,但结果相同。
你知道为什么会发生这种情况,或者我该如何解决?
为了更好地理解我的问题,我将附上一些来自 WPF 和 WinForm 的图像:
这是 WPF:
这是 WinForm:
解决方案
您可以使用 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
推荐阅读
- perl - 为什么版本排序顺序颠倒了?
- php - 当 Doctrine 查询已加入时,setMaxResults 无法正常工作
- tensorflow - 从源安装 TensorFlow:找不到结果 /tmp/tensorflow_pkg
- c# - ABP cookie过期时间问题
- django - 如何使用 ChannelNameRouter 在 Worker 和 Websocket(Django 和 Channels2.x)之间进行通信?
- r - Display vector in R with a defined viewport
- text-extraction - pdftotext 获取字体信息(字体系列、样式、大小)
- java - 将数据直接从浏览器发送到 Java 桌面应用程序
- mysql - MySQL 绑定错误。错误 1452
- angular - 如何将 Three.js 加载器导入 Angular 6 项目