如何衡量UWP应用中的文字大小?

时间:2016-03-13 10:21:15

标签: c# uwp win-universal-app

在WPF中,使用FormattedText可以实现这一点,如下所示:

private Size MeasureString(string candidate)
{
    var formattedText = new FormattedText(
        candidate,
        CultureInfo.CurrentUICulture,
        FlowDirection.LeftToRight,
        new Typeface(this.textBlock.FontFamily, this.textBlock.FontStyle, this.textBlock.FontWeight, this.textBlock.FontStretch),
        this.textBlock.FontSize,
        Brushes.Black);

    return new Size(formattedText.Width, formattedText.Height);
}

但是在UWP中,这个类不再存在了。那么如何在通用Windows平台中计算文本维度呢?

3 个答案:

答案 0 :(得分:27)

在UWP中,您创建TextBlock,设置其属性(例如TextFontSize),然后调用其Measure方法并传入无限大小。< / p>

var tb = new TextBlock { Text = "Text", FontSize = 10 };
tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));

之后,其DesiredSize属性包含TextBlock将具有的大小。

答案 1 :(得分:3)

以下是使用Win2D的替代方法:

private Size MeasureTextSize(string text, CanvasTextFormat textFormat, float limitedToWidth = 0.0f, float limitedToHeight = 0.0f)
{
    var device = CanvasDevice.GetSharedDevice();

    var layout = new CanvasTextLayout(device, text, textFormat, limitedToWidth, limitedToHeight);

    var width = layout.DrawBounds.Width;
    var height = layout.DrawBounds.Height;

    return new Size(width, height);
}

你可以像这样使用它:

string text = "Lorem ipsum dolor sit amet";

CanvasTextFormat textFormat = new CanvasTextFormat
{
    FontSize = 16,
    WordWrapping = CanvasWordWrapping.WholeWord,
};

Size textSize = this.MeasureTextSize(text, textFormat, 320.0f);

<子> Source

答案 2 :(得分:0)

如果您在UWP中遇到问题且Size无法解决或无法正常使用双重问题。这可能是因为您使用的是System.Drawing.Size

改为使用Windows.Foundation.Size