Рассмотрим следующее:
Допустим, окно имеет размер 1024x768, а ViewBox заполняет все окно, это означает, что TextBox действительно большой на экране.
Я хочу получить размер TextBox, который в данный момент отображается на экране. Если я получаю DesiredSize, ActualSize или даже RenderedSize, я всегда получаю 100.
Какие-либо предложения?
Обновление: я, вероятно, мог бы получить ActualWidth ViewBox и разделить его на ActualWidth его дочернего элемента, что дало бы мне текущий коэффициент масштабирования и каким-то образом представило бы его как свойство, но я не уверен, что это лучший способ сделать это.
Ответ 1 · рейтинг 21 · Markus Hütter
Вот как вы получаете ScaleTransform, которое ViewBox оказывает на своих дочерних элементов:
var child = VisualTreeHelper.GetChild(viewBox, 0) as ContainerVisual;
var scale = child.Transform as ScaleTransform;
Здесь viewBox - это ViewBox, в котором находится текстовое поле. Затем вы можете просто умножить scale.ScaleX * textBox.ActualWidth, и вы получите размер в координатах экрана.
Но становится еще проще! Чтобы получить размер этого текстового поля непосредственно в координатах экрана, выполните следующие действия:
textbox.PointToScreen(new Point(textbox.ActualWidth,textbox.ActualHeight)) - textbox.PointToScreen(new Point(0,0))