我想在 WinRT 应用程序中实现这一点。
我知道我可以使用 SharpDX 来渲染文本,您可以查看我的CodeProject 文章。我想知道如何创建一个大小的白色背景图像,以容纳具有字体系列 Segoe UI 和字体大小为 16 的文本?
我找到了如何创建白色图像。但是如何计算将在白色图像上呈现的长字符串(如 2000 多个字符)的大小?
如果我从代码创建文本块,我已经检查了如何计算加载时文本块的高度和宽度?,但我得到的值不正确。我不知道在Arrange(...)
&Measure(...)
方法中作为参数传递什么。我Window.Current.Bounds
作为参数传递。我想要这样的东西。
private double GetHeight(string Text, string fontFamily, double fontSize)
{
//TODO:
}
更新 1
根据菲利普的建议,我尝试了这个,但它也给了我不正确的价值。
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
}