2009-08-16 9 views

risposta

8

Se il codice che si sta scrivendo si trova nel file code-behind per il file xaml, quindi Visual Studio dovrebbe generare automaticamente variabili membro contenenti riferimenti a qualsiasi elemento denominato nel file xaml. Quindi se hai un pulsante con x: Name = "myButton", puoi accedere a questo pulsante tramite this.myButton.

Se si vuole fare riferimento a un elemento di nome da qualche parte diverso dal file code-behind, è possibile chiamare FindName sull'elemento all'elemento di nome, per esempio:

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

dove myGrid è un riferimento alla Griglia in questione.

+0

woot! questo funziona Ho trovato un'alternativa che è un po 'più complessa ma funziona altrettanto bene: pulsante privato myButtnon; foreach (FrameworkElement fe in myGrid.Children) { se (fe.GetType() == typeof (Button) myButton = fe Button; } – Maciek

+0

noti che myButton sarebbe un campo con accessibilità interna quindi anche da codice esterno il file code-behind puoi accedervi senza ricorrere a FindName. – AnthonyWJones

+0

se hai idea di quanto tempo ho cercato questa semplice risposta! grazie anche per la domanda diritta – Arrie

1

Ogni controllo con x: Nome ha un campo creato per esso nella classe parziale che viene creata per XAML. Questo campo ha una accessibilità interna. Quindi dal codice con il "code-behind" cs (perché odio quel termine?) Puoi semplicemente usare il nome del controllo direttamente nel codice per accedervi.

+0

Vuoi essere così gentile ed elaborato? – Maciek

+0

Penso che voglia dire, se hai x: Name = "MyNamedControl". Una volta che lo compili, il file Reference.g lo avrà automaticamente disponibile in modo che tu possa semplicemente digitare this.MyNamedControl – Paully

+0

Ma se stai facendo template, questo non succederà e dovresti usare FindName – Paully

Problemi correlati