Silverlight:如何预测字符串大小?

Eri*_*AND 8 silverlight windows-phone-7

我面临很多Silverlight处理布局问题的方法.主要是,在实际绘制字符串之前,我找不到预测字符串占用大小的方法.在iPhone上,我们有一些非常简单的方法,允许我们根据字体大小,自动换行选项和可用的宽度和/或高度来确定字符串在屏幕上占用的大小.但是使用Silverlight,我找不到在我的应用程序中获得一致结果的方法.

我目前正在使用TextBlock实例的ActuelHeight和ActualWidth,但它给出了随机结果.例如,我使用以下代码......

TextBlock proto = new TextBlock();

proto.Width = 456;
proto.TextWrapping = TextWrapping.Wrap;
proto.Text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
double h = proto.ActualHeight;
Run Code Online (Sandbox Code Playgroud)

... h设置为66像素!正如你自己可以猜到的那样,这样一个长文本无法适应456像素宽和66像素高的矩形.当我在画布中添加文本块时,确认它的大小设置为{456; 66}并测试应用程序:文本根本不适合文本块!

有人可以解释我问题所在,并指出我采用一致(可信)的方式来衡量字符串大小吗?

谢谢提前,

埃里克.

Ken*_*art 12

您可以TextBlock通过调用其Measure方法来要求测量自身(没有显示):

textBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
var width = textBlock.DesiredSize.Width;
var height = textBlock.DesiredSize.Height;
Run Code Online (Sandbox Code Playgroud)

当然,它可能没有无限的宽度和高度,因此根据您的使用情况,您可能更愿意让您的根元素测量自己,这将反过来测量所有孩子(包括TextBlock).