2012-06-19 12 views
7

Ho uno stackpanel che contiene un'immagine e un TextBlock. Sto alzando un evento una volta doppio click viene eseguito dall'utente (PS -.. Sto aggiungendo lo StackPanel ed è bambini (l'immagine e il TextBlock programatically se è importante)come ottenere i figli di un elemento WPF

Ora, ho bisogno per ottenere l'elemento TextBlock dall'interno dello stackpanel, capisco che dovrei farlo usando DataBinding, ma sono un principiante di WPF, e in realtà non ho trovato alcun esempio su di esso nel Web. Sarò felice per un spiegazione, vi ringrazio molto!

(ho imparato a conoscere l'associazione dati qualche tempo fa).

+0

Perché stai aggiungendo StackPanel e i relativi figli a livello di programmazione? Le probabilità sono buone che tu possa ottenere ciò che vuoi in Xaml, e legare i clic a un comando, o semplicemente fare riferimento a TextBlock per nome. –

+0

@MichaelGraczyk Sto raggiungendo i dati che visualizzo (ad es. Stackpanel) da un database. – idish

+0

Non dovresti quasi mai aggiungere elementi di interfaccia utente dal codice. Se l'interfaccia utente non cambia durante il runtime, non devi aggiungere alcun elemento dell'interfaccia utente dal codice. Puoi dare agli elementi un nome con la direttiva x: Name, e poi accedere a quel nome dal code-behind. –

risposta

17

Un modo semplice di ottenere il primo elemento figlio di un certo tipo (ad esempio TextBlock) è questo:

var textBlock = panel.Children.OfType<TextBlock>().FirstOrDefault(); 

Si ottiene il primo TextBlock o null se non ce n'è.

+0

Eccellente! Funziona! Grazie mille! – idish

0

È necessario DataBind TextBlockText elemen (?) t per la classe - in questo modo:

in XAML

<TextBlock x:Name="MyTextBlock" 
    Text={Binding ShowThis, Mode=OneWay} /> 

in classe:

public class MyDataContextClass 
{ 
    private string showThis = string.Enpty; 
    public string ShowThis 
    { 
     get {return showThis;} 
     set 
     { 
       showThis = value; 
       if (PropertyChanged != null) 
        PropertyChanged(....); 
     } 
     } 
    } 

e si deve DataBing XAML in classe. (? Può essere nel costruttore)

public class MyXamlWindow 
    { 
     public MyXamlWindow() 
     { 
      this.DataContext = new MyDataContextClass(); 
     } 
    } 

C'è un sacco di modi per farlo tutti sopra

+0

E ovviamente se vuole solo accedere a TextBlock, può semplicemente usare x: Name => MyTextBlock. – astreal

Problemi correlati