2009-08-16 12 views

Répondre

8

Si le code que vous écrivez se trouve dans le fichier code-behind du fichier xaml, Visual Studio doit automatiquement générer des variables membres contenant des références aux éléments nommés du fichier xaml. Donc, si vous avez un bouton avec x: Name = "myButton", vous pouvez accéder à ce bouton via this.myButton.

Si vous souhaitez référencer un élément nommé de quelque part autre que le fichier code-behind, vous pouvez appeler FindName sur l'élément à l'élément nommé, par exemple:

Button myButton = myGrid.FindName("myButton") as Button; 

où myGrid est une référence à la Grille en question.

+0

woot! cela marche. J'ai trouvé une alternative un peu plus complexe mais qui fonctionne aussi: private Button myButtnon; foreach (FrameworkElement fe dans myGrid.Children) { if (fe.GetType() == typeof (Button) myButton = fe comme Bouton;} – Maciek

+0

Notez que myButton serait un champ d'accessibilité interne par là même à partir du code extérieur le code-behind, vous pouvez y accéder sans avoir recours à FindName – AnthonyWJones

+0

si vous aviez une idée de combien de temps j'ai cherché cette réponse simple! merci pour la question droite aussi – Arrie

1

Chaque contrôle avec un x: Name a un champ créé pour lui dans la classe partielle créée pour le XAML. Ce champ a une accessibilité interne. Donc, à partir du code avec dans le "code-behind" cs (pourquoi je déteste ce terme?), Vous pouvez simplement utiliser le nom du contrôle directement dans le code pour y accéder.

+0

Seriez-vous si gentil et si compliqué que cela? – Maciek

+0

Je pense qu'il veut dire, si vous avez x: Name = "MyNamedControl". Une fois que vous le compilez, le fichier Reference.g l'aura automatiquement disponible, donc vous pouvez simplement taper this.MyNamedControl – Paully

+0

Mais si vous faites des templates, cela n'arrivera pas et vous devriez utiliser FindName – Paully

Questions connexes