2010-01-22 26 views
9

Considérez ce qui suit:Obtenir la taille (après avoir été « streched ») d'un élément dans une ViewBox

Disons que la fenêtre est 1024x768 et la ViewBox remplit toute la fenêtre , cela signifie que le TextBox est vraiment grand sur l'écran.

Je veux obtenir la taille de la zone de texte telle qu'elle est actuellement à l'écran. Si je reçois DesiredSize ou ActualSize ou même RenderedSize, je reçois toujours 100.

Des suggestions?

Mise à jour: Je pourrais probablement obtenir le ActualWidth du ViewBox et le diviser par le ActualWidth de son enfant qui me donnerait le facteur d'échelle en cours et exposer que comme une propriété en quelque sorte, mais je ne suis pas sûr que ce soit mieux façon de le faire.

+0

Avez-vous envisagé de vérifier les propriétés "Largeur" ​​et "Hauteur" de la zone de texte? – CodeMouse92

+1

@ JasonMc92 - Cela ne va vraiment pas aider, car la largeur et la hauteur seraient très probablement nulles. Largeur et Hauteur sont utilisées pour * demander * les tailles, ne pas demander la taille réelle. –

Répondre

17

Voici comment vous obtenez le ScaleTransform le ViewBox exerce sur ses enfants.

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

Ici viewBox est le ViewBox que zone de texte se trouve dans Ensuite, vous pouvez simplement multiplier scale.ScaleX * textBox.ActualWidth et vous obtenez la taille en coordonnées d'écran

Mais c'est encore plus facile! Pour obtenir la taille de cette zone de texte directement dans les coordonnées d'écran, procédez comme suit:

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