2012-03-03 16 views
6

Ho due file nel mio progetto VS: Custom.xaml e Custom.csAccesso XAML controlla da C# code-behind

Nel mio file XAML, ho le seguenti caselle di testo:

<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" /> 

Nella mia cs, ho il seguente metodo:

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

posso succe colpire con successo il gestore di eventi sopra. Quindi, posso prendere TextBox1 e le sue proprietà usando e.Source, ma vorrei accedere a TextBox2 e alle sue proprietà.

Come sidenote, il file diCs è solo una classe C# che sto riferimento a, non un xaml.cs. Inoltre, capisco che potrei implementarlo tramite un UserControl, ma non posso farlo in questo scenario per motivi che non rientrano nell'ambito di questo post.

Si prega di avvisare su come posso ottenere/impostare le proprietà di TextBox2.

Grazie.

MODIFICA: Qualsiasi altro input su questo? Come soluzione alternativa, ho aggiunto un gestore di eventi denominato TextBox2_Loaded e quindi impostato e.Source su una variabile di istanza. Quindi, in TextBox1_SelectionChanged, posso accedere alla variabile di istanza. Mi piacerebbe davvero indirizzare direttamente il controllo (ad esempio TextBox2.IsEnabled). Devo mancare una dichiarazione o un'eredità da qualche parte. Non riesco nemmeno a trovare il controllo usando FindName.

+0

stai usando la casella di testo 2 come elemento di un controllo ripetuto (un gridview, listview..etc)? –

+0

No, non sto usando un gridview o listview – Josh

risposta

3

Va bene, così mi pare aveva lasciato fuori un componente fondamentale in questo post ... I miei controlli TextBox sono all'interno dei controlli DataTemplate. Dalla mia ricerca, i controlli TextBox non sono accessibili quando si trovano all'interno dei controlli DataTemplate. Davvero non pensavo che sarebbe stato importante, ma immagino che le variabili di istanza non vengano create quando esiste questo scenario.

Se ho interpretato questo in modo errato, si prega di fornire input. Per ora, sono andato avanti e ho aggiunto un evento Loaded e ho definito i miei controlli TextBox come variabili di istanza in modo che sia possibile accedervi e modificare le proprietà quando si verificano altre attività.

Grazie per l'input di tutti.

+0

Ovviamente, non puoi accedere ad un componente con nome da un DataTemplate, anche in un evento caricato. È necessario catturare l'istanza del componente UI cerated. – Ouarzy

3

Finché si è impostato un namein XAML, è possibile accedere direttamente per nome (Il compilatore XAML creerà una variabile di istanza per voi.)

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

Per qualche motivo non posso però usare TextBox2. Intellisense non lo visualizza e il compilatore pensa che non sia definito. Devo ereditare la mia lezione da qualcosa? Classe pubblica pubblica Personalizzata:? – Josh

+0

Prova a fare una build in modo che Studio possa vedere i campi che il compilatore xaml creerà. MODIFICARE. Sì, il tuo codice deve essere una classe parziale che corrisponde al tuo XAML. – GazTheDestroyer

+0

Stai confermando che la mia definizione della mia classe è corretta o che devo ereditare da qualcosa? Inoltre, ho costruito il mio progetto più volte. – Josh

0

Mi è appena successo. Ho dovuto chiudere la mia soluzione e riaprirla.

Problemi correlati