如何在Win2D中计算文本的大小

11

我正在使用Win2D编写一个Windows 10应用程序,并尝试绘制一个形状,该形状可以动态缩放以适应其中的任何文本。

我想做的是找出使用给定CanvasTextFormat绘制的特定字符串的大小,然后将其用于设置形状的大小。

我的问题是我似乎找不到一种方法来计算字符串的大小?

2个回答

16
请参考下面的代码来计算所需大小(寻找“您要查找的矩形”)。

看下面的代码以计算所需的大小(查找“theRectYouAreLookingFor”)

private void CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
    CanvasDrawingSession drawingSession = args.DrawingSession;
    float xLoc = 100.0f;
    float yLoc = 100.0f;
    CanvasTextFormat format = new CanvasTextFormat {FontSize = 30.0f, WordWrapping = CanvasWordWrapping.NoWrap};        
    CanvasTextLayout textLayout = new CanvasTextLayout(drawingSession, "Hello World!", format, 0.0f, 0.0f);
    Rect theRectYouAreLookingFor = new Rect(xLoc + textLayout.DrawBounds.X, yLoc + textLayout.DrawBounds.Y, textLayout.DrawBounds.Width, textLayout.DrawBounds.Height);
    drawingSession.DrawRectangle(theRectYouAreLookingFor, Colors.Green, 1.0f);
    drawingSession.DrawTextLayout(textLayout, xLoc, yLoc, Colors.Yellow);
}

3
我发现CanvasTextLayout的LayoutBounds属性对我比DrawBounds更有用。也许其他人也会这样认为。 - Keith Murray
1
能否在没有drawingSession的情况下获取大小?我想根据文本的高度调整画布的大小。 - Brad B.

3

如果您像Michael Vach的示例中一样,使用0requestedWidth创建了一个CanvasTextLayout,则可能希望在Win2D 1.23中禁用自动换行。方法如下:

var textLayout = new CanvasTextLayout(drawingSession, "Hello World!", fontFormat, 0.0f, 0.0f) {
            WordWrapping = CanvasWordWrapping.NoWrap
};
var completeOuterSize = textLayout.LayoutBounds

我不允许发表评论。

你不需要道歉。对现有答案的实质性改进无论如何都值得单独回答。此外,您将无法在评论中正确格式化代码。因此,主要的代码示例应始终放在答案中。顺便说一下,如果您想引用另一个答案(或问题),可以点击“分享”链接并在文本中使用它。 - Adrian W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接