2010-06-24 15 views
1

J'ai actuellement un contrôle utilisateur qui contient des éléments qui ont une certaine coordonnée X, Y et il y a des limites à ce que ces points doivent être à l'intérieur. Dans ce cas, ces positions sont 0> X> 40 et 0> Y> 80 (40x80). Le contrôle dans lequel j'héberge ces éléments est dynamique mais a un certain ratio d'aspect basé sur la taille de la fenêtre. J'ai besoin de traduire ces coordonnées X & en emplacements relatifs dans le contrôle de l'utilisateur. Toute aide est grandement appréciée! Merci d'avance! Si cela compte/aide, j'utilise Silverlight.Traduction X, Coordonnée Y

Répondre

4

Vous pouvez utiliser GeneralTransform pour déterminer la position d'un UIElement par rapport à un conteneur. Voici un extrait:

/// <summary> 
    /// Gets the position of the specified element's top left corner, relative to the specified container. 
    /// </summary> 
    /// <param name="element"></param> 
    /// <param name="container"></param> 
    public static Point GetPosition(UIElement element, UIElement container) 
    { 
     if (element == null) 
      throw new ArgumentNullException("element"); 
     if (container == null) 
      throw new ArgumentNullException("container"); 
     var gt = element.TransformToVisual(container); 
     var position = gt.Transform(new Point(0, 0)); 
     return position; 
    } 

Cheers, Alex

[EDIT] En fait, la vérification "conteneur" NULL est inutile - TransformToVisual également accepter null comme paramètre. Un autre problème: TransformToVisual va lancer une ArgumentException, par ex. quand "element" n'est pas visible, n'est pas actuellement dans l'arbre visuel, etc. Malheureusement, je n'ai pas trouvé de moyen de déterminer si TransformToVisual va lancer cette exception avant de l'appeler sur "element". Donc, j'ai simplement enveloppé les appels à TransformToVisual dans un bloc try-catch et avalé l'ArgumentException, parce que c'est tout à fait inutile à mon humble avis.

Questions connexes