2011-01-24 9 views
5

ho più pulsanti invece di fareIn WPF posso allegare lo stesso gestore di clic a più pulsanti contemporaneamente come posso fare in Javascript/Jquery?

this.button1.Click += new System.EventHandler(this.button_Click); 
this.button2.Click += new System.EventHandler(this.button_Click); 
etc. 
this.button10.Click += new System.EventHandler(this.button_Click); 

Mi piacerebbe essere in grado di fare qualcosa di simile in pseudo-codice:

this.button*.Click += new System.EventHandler(this.button_Click); 

in JavaScript è possibile c'è qualcosa di simile in WPF?

risposta

10

In WPF, Button.Click è un routed event, che significa che l'evento viene instradato verso l'albero visivo fino a quando non viene gestito. Ciò significa che è possibile aggiungere un gestore di eventi nel vostro XAML, in questo modo:

<StackPanel Button.Click="button_Click"> 
    <Button>Button 1</Button> 
    <Button>Button 2</Button> 
    <Button>Button 3</Button> 
    <Button>Button 4</Button> 
</StackPanel> 

Ora tutti i pulsanti condividere un singolo gestore (Button_Click) per il loro evento Click.

Questo è un modo semplice per gestire lo stesso evento in un gruppo di controlli che risiedono nello stesso contenitore padre. Se si vuole fare la stessa cosa dal codice, è possibile utilizzare il metodo AddHandler, in questo modo:

AddHandler(Button.ClickEvent, new RoutedEventHandler(button_Click)); 

Che verrà aggiungere un gestore per ogni clic del pulsante nella finestra. Si potrebbe voler dare il vostro StackPanel un nome (come, "stackPanel1") e farlo proprio per questo contenitore:

stackPanel1.AddHandler(Button.ClickEvent, new RoutedEventHandler(button_Click)); 
+0

Grazie non ho chiesto di farlo a livello di programmazione, ma hai letto nella mia mente :) – user310291

3

Invece di effettuare button1, button2, creare un elenco di pulsanti.

Poi si può scrivere:

myList.ForEach(b => b.Click += button_Click); 

Da XAML è possibile collegare il gestore click al genitore dei pulsanti qualcosa di simile (io uso uno StackPanel come esempio):

<StackPanel Button.Click="button_Click"> 
    <Button .... >First button</Button> 
    <Button .... >Second button</Button> 
    <Button .... >Third button</Button> 
</StackPanel> 

Funziona perché i pulsanti Click evento è un evento indirizzato a gorgogliamento .

+0

buona spiegazione vi ringrazio molto foreach io non sono abituato a ma imparare. – user310291

1

È possibile utilizzare Linq To VisualTree per individuare tutti i pulsanti in Window/UserControl, quindi scorrere su questo elenco aggiungendo il gestore di eventi.

var buttons = this.Descendants<Button>().Cast<Button>(); 
foreach(var button in buttons) 
{ 
    button.Click += button_Click; 
} 

penso che è quanto di più conciso che si sta per farlo!

+0

Molto interessante per progetti complessi al momento ho solo bisogno di basi. – user310291

Problemi correlati