2009-08-16 9 views

Respuesta

8

Si el código que está escribiendo está en el archivo de código subyacente para el archivo xaml, entonces Visual Studio debería generar automáticamente variables miembro que contengan referencias a cualquier elemento con nombre en el archivo xaml. Entonces, si tiene un Botón con x: Nombre = "myButton", puede acceder a este botón a través de this.myButton.

Si desea hacer referencia a un elemento con nombre de algún lugar que no sea el archivo de código subyacente, puede llamar FindName en el elemento con el elemento llamado, por ejemplo:

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

donde myGrid es una referencia a la Cuadrícula en cuestión.

+0

woot! esto funciona. Encontré una alternativa que es un poco más compleja pero funciona igual: botón privado myButtnon; foreach (FrameworkElement Fe en myGrid.Children) { si (fe.GetType() == typeof (botón) myButton = Fe como botón; } – Maciek

+0

Nota que myButton habría un campo con accesibilidad interna por lo tanto, incluso de código fuera el archivo de código subyacente puede acceder a él sin recurrir a FindName. – AnthonyWJones

+0

si tenía idea de cuánto tiempo busqué esta simple respuesta! gracias por la pregunta directa también – Arrie

1

Cada control con una x: Nombre tiene un campo creado para él en la clase parcial que se crea para el XAML. Este campo tiene una accesibilidad interna. Por lo tanto, desde el código con cs "código subyacente" (¿por qué odio ese término?) Simplemente puede usar el nombre de control directamente en el código para acceder a él.

+0

¿Serías tan amable y elaborado? – Maciek

+0

Creo que quiere decir, si tiene x: Name = "MyNamedControl". Una vez que lo compile, el archivo Reference.g lo tendrá automáticamente disponible para que pueda simplemente escribir this.MyNamedControl – Paully

+0

Pero si está haciendo plantillas, esto no sucederá y debería usar FindName – Paully

Cuestiones relacionadas