bonjour
je souhaite dans mon code behind récupérer les valeurs X et Y de la position d'une grid dans mon xaml. Comment faire ?
Version imprimable
bonjour
je souhaite dans mon code behind récupérer les valeurs X et Y de la position d'une grid dans mon xaml. Comment faire ?
J'imagine que si tu poses cette question c'est que ton Grid n'est pas positionné sur un Canvas ;)
Si tu veux obtenir les coordonnées de ton Grid relativement à ton LayoutRoot tu peux essayer ceci :
Code:
1
2
3 GeneralTransform g = this.TonGrid.TransformToVisual( this.LayoutRoot); Point p = g.Transform( new Point( 0, 0 ) );
non justement, dans ma page j'ai une succession de stack panel -> 1 général orienté de manière verticale, et dans chaque élément d'autres stack panel.. bref au final j'affiche plein de résultats dans des itemsControl dans des belles grid personnalisées. Maintenant le but pour moi est de tracer des lignes entre ces grid, c'est pour ça que je souhaite récupérer ces valeurs.. je pensais trouver rapidement mais je suis étonné de voir qu'on ne puisse pas récupérer simplement les coordonnées actuelles de n'importe quel élément..
j'ai essayé ta solution et j'ai cette erreurn'ayant jamais utilisé cela je ne sais pas ce que cela veux dire..Citation:
La valeur n'est pas comprise dans la plage attendue.
Bizzare, Cette methode fonctionne très bien chez moi avec cette exemple de base :
Code:
1
2
3
4 <Grid x:Name="LayoutRoot"> <Grid x:Name="TonGrid" Margin="50"/> </Grid>
Tu peux nous en dire plus sur l'erreur. sur quelle méthode est-elle déclenchée ?Citation:
j'ai essayé ta solution et j'ai cette erreur "La valeur n'est pas comprise dans la plage attendue."
c'est bizare ça j'ai ajouté une grid directement dans le layoutRoot, je l'ai centré, et pas moyen de passer la méthode. j'ai toujours la même erreur. En voici un peut plus si ça peut t'aider:
Citation:
à MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData)
à MS.Internal.XcpImports.MethodPack(IntPtr objectPtr, String methodName, Object[] rawData)
à MS.Internal.XcpImports.UIElement_TransformToVisual(UIElement element, UIElement visual)
à System.Windows.UIElement.TransformToVisual(UIElement visual)
à MonProgramme.MainPage.rafraichir(String nomPersonne)
Le faite de centrer le grid fonctionne chez moi aussi.
Essaye de ne pas lancer la méthode de récupération de la position dans ta méthode rafraichir mais plutot dans l'evenement Loaded dans un premier temps.
bizare.. avec ce même code dans le constructeur j'ai toujours la même erreur..
j'ai palié au problème en mettant en place des règles de calcul et maintenant j'ai quelque chose qui fonctionne bien .. je sais que ça n'est pas le sujet de la discussion mais.. comment supprimer toute les lignes dessinées dans mon layoutRoot lors d'un rafraichissement de mes valeurs ?
j'ai fait comme ceci pour mes traits:
merci par avance ;)Code:
1
2
3
4
5
6
7
8 Line line = new Line(); line.X1 = 100; line.Y1 = 100; line.X2 = 200; line.Y2 = 200; line.Stroke = Util.GetColorFromHex("#ff000000"); line.Opacity = 100; LayoutRoot.Children.Add(line);
Stocke toutes tes lignes dans une liste dès que tu en ajoutes une dans le LayoutRoot. Si tu veux les détruire rapidement, tu n'as plus qu'a parcourir ta liste de ligne (plus rapide que de parcourir les enfants de LayoutRoot et d'en déterminer le type) :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 List<Line> lines = new List<Line>(); // ajouter des lignes Line line = new Line(); ... lines.Add( line); LayoutRoot.Children.Add(line); ... // destruction de toutes les lignes ajoutées foreach( Line line in lines ) { LayoutRoot.Children.Remove(line); }
ok merci beaucoup ça marche très bien comme ça ;)
finalement de manière "détournée" ce que je voulais faire marche.. merci !!