2010-01-22 5 views
9

considerar lo siguiente:Obtener el tamaño (después de haber sido "estirada") de un elemento en un ViewBox

Digamos que la ventana es de 1024x768 y la ViewBox llena toda la ventana , esto significa que TextBox es realmente grande en la pantalla.

Quiero obtener el tamaño del TextBox como está actualmente en la pantalla. Si obtengo DesiredSize o ActualSize o incluso RenderedSize siempre obtengo 100.

¿Alguna sugerencia?

Actualización: probablemente podría conseguir el ActualWidth del ViewBox y se divide por el ActualWidth de su hijo, que me daría el factor de escala actual y exponer que como una propiedad de alguna manera, pero no estoy seguro de que es el mejor forma de hacerlo

+0

¿Ha considerado verificar las propiedades "Ancho" y "Altura" del cuadro de texto? – CodeMouse92

+1

@ JasonMc92 - Eso realmente no ayudaría, ya que el ancho y la altura serían probablemente nulos. El ancho y el alto se usan para * solicitar * tamaños, no para pedir el tamaño real. –

Respuesta

17

Así es como se obtiene la ScaleTransform la ViewBox ejerce sobre sus hijos:.

var child = VisualTreeHelper.GetChild(viewBox, 0) as ContainerVisual; 
var scale = child.Transform as ScaleTransform; 

Aquí viewBox es la ViewBox que cuadro de texto se encuentra en a continuación, puedes multiplicar scale.ScaleX * textBox.ActualWidth y se obtiene el tamaño en coordenadas de pantalla

¡Pero es aún más fácil! Para obtener el tamaño del cuadro de texto directamente en Coordenadas de pantalla, haga lo siguiente:

textbox.PointToScreen(new Point(textbox.ActualWidth,textbox.ActualHeight)) - textbox.PointToScreen(new Point(0,0)) 
Cuestiones relacionadas