Получить размер (после того, как он был растянут) элемента в ViewBox

Рассмотрим следующее:

Допустим, окно имеет размер 1024x768, а ViewBox заполняет все окно, это означает, что TextBox действительно большой на экране.

Я хочу получить размер TextBox, который в данный момент отображается на экране. Если я получаю DesiredSize, ActualSize или даже RenderedSize, я всегда получаю 100.

Какие-либо предложения?

Обновление: я, вероятно, мог бы получить ActualWidth ViewBox и разделить его на ActualWidth его дочернего элемента, что дало бы мне текущий коэффициент масштабирования и каким-то образом представило бы его как свойство, но я не уверен, что это лучший способ сделать это.


person TimothyP    schedule 22.01.2010    source источник
comment
Рассматривали ли вы возможность проверки свойств ширины и высоты текстового поля?   -  person CodeMouse92    schedule 22.02.2011
comment
@ JasonMc92 - Это действительно не поможет, поскольку ширина и высота, скорее всего, будут нулевыми. Ширина и высота используются для запроса размеров, а не для запроса фактического размера.   -  person Elad Katz    schedule 10.03.2011


Ответы (1)


Вот как вы получаете 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))
person Markus Hütter    schedule 20.03.2011