Получить размер (после того, как он был «растянут») элемента в ViewBox - PullRequest
10 голосов
/ 22 января 2010

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

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

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

Есть предложения?

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

1 Ответ

19 голосов
/ 20 марта 2011

Вот как вы получаете 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))
...