Я сталкиваюсь с большой проблемой в Silverlight, как с макетом. В основном, я не могу найти способ предсказать размер, занимаемый строками, до того, как они будут нарисованы. На iPhone у нас есть несколько очень простых методов, которые позволяют нам определить размер строки на экране, основываясь на размере шрифта, опции переноса слов и доступной ширине и / или высоте. Но с Silverlight я не могу найти способ добиться стабильных результатов в своем приложении.
В настоящее время я использую ActuelHeight и ActualWidth экземпляра TextBlock, но он дает мне случайные результаты. Например, я использую следующий код ...
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;
... h установлен на 66 пикселей! Как вы можете догадаться, такой длинный текст не может поместиться в прямоугольнике шириной 456 пикселей и высотой 66 пикселей. И это подтверждается, когда я добавляю текстовый блок внутри холста, устанавливаю его размер {456; 66} и проверяю приложение: текст вообще не помещается в текстовый блок!
Может ли кто-нибудь объяснить мне, в чем заключается проблема, и указать на непротиворечивый (и надежный) способ измерения размеров строк?
Спасибо заранее,
Эрик.