如何计算身高;具有特定字体系列的字符串宽度&字体大小?

时间:2013-09-14 18:30:20

标签: c# windows-8 windows-runtime microsoft-metro windows-store-apps

我想在WinRT应用中实现this

我知道我可以使用SharpDX来渲染文本,你可以查看我的CodeProject article我想知道如何创建一个大小的白色背景图像,其容量可以容纳带有字体系列Segoe UI且字体大小为16的文本?

我发现了如何创建白色图像。但是我如何计算长字符串的大小(如2000+个字符),它将在白色图像上渲染?

我已经检查了how to calculate the textbock height and width in on load if i create textblock from code?,但我的价值不正确。我不知道在Arrange(...)& Measure(...)方法。我正在传递Window.Current.Bounds作为参数。我想要这样的东西。

private double GetHeight(string Text, string fontFamily, double fontSize)
{
    //TODO:
}

更新1

根据Filip's suggestion我试过这个,但它也给了我不正确的价值。

TextBlock textBlock = new TextBlock();
private double GetHeight(string Text)
{
    var scroller = new ScrollViewer();
    scroller.Height = Window.Current.Bounds.Height;
    scroller.Width = Window.Current.Bounds.Width;
    scroller.Content = textBlock;

    textBlock.Text = Text;
    textBlock.FontFamily = new FontFamily("Segoe UI");
    textBlock.FontSize = 40;
    textBlock.TextWrapping = TextWrapping.Wrap;
    textBlock.Arrange(new Rect(0, 0, 9000000000, 9000000000));
    textBlock.Measure(new Size(9000000000, 9000000000));

    root.Children.Add(scroller);

    return textBlock.ActualHeight; //return 478.82919311523437
}

// root is the Root grid of the app, there's nothing in XAML
private void root_Tapped_1(object sender, TappedRoutedEventArgs e)
{
    var aa = textBlock.ActualHeight; //return 2766.5732421875
}

0 个答案:

没有答案