2012-03-03 18 views
6

Tengo dos archivos en mi proyecto VS: Custom.xaml y Custom.csacceso XAML controla desde C# de código subyacente

En mi archivo XAML, tengo los siguientes cuadros de texto:

<TextBox x:Name="TextBox1" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox1_SelectionChanged" /> 

<TextBox x:Name="TextBox2" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox2_SelectionChanged" /> 

En mi .cs, tengo el siguiente método:

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
} 

puedo sUCCE Haga clic inmediatamente en el controlador de eventos. Entonces, puedo tomar TextBox1 y sus propiedades usando e.Source, pero me gustaría acceder a TextBox2 y sus propiedades.

Como anotación al margen, el .cs archivo es sólo una clase C# que estoy Hacer referencia, no un xaml.cs. Además, entiendo que podría implementar esto a través de UserControl, pero no puedo hacer eso en este escenario por razones que están fuera del alcance de esta publicación.

Por favor asesorar sobre cómo puedo obtener/establecer propiedades de TextBox2.

Gracias.

EDIT: ¿Alguna otra información sobre esto? Como solución alternativa, agregué un controlador de eventos llamado TextBox2_Loaded y luego establecí e.Source en una variable de instancia. Luego, en TextBox1_SelectionChanged, puedo acceder a la variable de instancia. Realmente me gustaría simplemente dirigir el control directamente (por ejemplo, TextBox2.IsEnabled). Debo estar perdiendo una declaración o herencia en alguna parte. Ni siquiera puedo encontrar el control usando FindName.

+0

¿está utilizando el cuadro de texto2 como un elemento de un control repetitivo (un gridview, listview..etc)? –

+0

No, no estoy usando un gridview o listview – Josh

Respuesta

3

Muy bien, así que al parecer había dejado fuera un componente crítico en esta publicación ... Mis controles TextBox están dentro de los controles de DataTemplate. Según mi investigación, no se puede acceder a los controles TextBox cuando se encuentran dentro de los controles de DataTemplate. Realmente no creo que eso importe, pero supongo que las variables de instancia no se crean cuando existe esta situación.

Si he interpretado esto incorrectamente, por favor ingrese. Por ahora, me adelanté y agregué un evento Loaded y definí mis controles TextBox como variables de instancia para poder acceder a ellos y cambiar las propiedades cuando ocurren otras actividades.

Gracias por la contribución de todos.

+0

Por supuesto, no puede acceder a un componente con nombre desde un DataTemplate, incluso en un evento cargado. Necesita capturar la instancia de su componente de interfaz de usuario cerado. – Ouarzy

3

Mientras ha establecido una namein el XAML, puede acceder directamente por su nombre (El compilador XAML creará una variable de instancia para usted.)

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
    TextBox2.Text = "Whatever"; 
} 
+0

Por alguna razón, no puedo usar TextBox2. Intellisense no lo muestra y el compilador cree que no está definido. ¿Debo heredar mi clase de algo? clase parcial pública personalizada:? – Josh

+0

Intenta hacer una compilación para que Studio pueda ver los campos que creará el compilador xaml. EDITAR. Sí, su código debe ser una clase parcial que coincida con su XAML. – GazTheDestroyer

+0

¿Confirmas que mi definición de mi clase es correcta o que necesito heredar de algo? Además, he construido mi proyecto varias veces. – Josh

0

Esto me pasó a mí. Tuve que cerrar mi solución y volver a abrirla.

Cuestiones relacionadas