2011-01-24 8 views
5

tengo varios botones en lugar de hacerEn WPF, ¿puedo conectar el mismo manejador de clics a varios botones a la vez como puedo en 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); 

me gustaría ser capaz de hacer algo como esto en pseudo-código:

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

en Javascript es posible es que hay algo por el estilo en WPF?

Respuesta

10

En WPF, Button.Click es routed event, lo que significa que el evento se enruta hasta el árbol visual hasta que se gestiona. Eso significa que usted puede agregar un controlador de eventos en su XAML, como esto:

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

Ahora todos los botones compartirán un único controlador (Button_Click) para su evento Click.

Esa es una manera fácil de manejar el mismo evento a través de un grupo de controles que viven en el mismo contenedor primario. Si usted quiere hacer lo mismo de código, se puede utilizar el método AddHandler, así:

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

Eso va a agregar un controlador por cada clic de botón en la ventana. Es posible que desee dar a su StackPanel un nombre (como, "stackPanel1") y hacerlo sólo para ese contenedor:

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

Gracias, no pedí hacer esto programáticamente, pero lo leíste en mi mente :) – user310291

3

En lugar de hacer button1, button2 etc., haga una lista de botones.

entonces usted puede escribir:

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

De XAML se puede conectar el controlador de clic a los padres de los botones de algo como esto (yo uso un StackPanel como ejemplo):

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

Esto funciona porque el evento Click de los botones es un evento enrutado de borrado.

+0

Buena explicación muchas gracias al ParaCada No estoy acostumbrado a pero lo aprenderá. – user310291

1

Puede usar Linq To VisualTree para ubicar todos los botones en su Ventana/UserControl, luego iterar sobre esta lista agregando su manejador de eventos.

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

Creo que es tan conciso como usted va a conseguirlo!

+0

Muy interesante para proyectos complejos en este momento solo necesito lo básico. – user310291

Cuestiones relacionadas