I have multiple buttons instead of doing
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);
I'd like to be able to do something like this in pseudo-code:
this.button*.Click += new System.EventHandler(this.button_Click);
In Javascript it is possible is there something like that in WPF ?
In WPF,
Button.Click
is a routed event, which means that the event is routed up the visual tree until it's handled. That means you can add an event handler in your XAML, like this:Now all the buttons will share a single handler (button_Click) for their Click event.
That's an easy way to handle the same event across a group of controls that live in the same parent container. If you want to do the same thing from code, you can use the AddHandler method, like this:
That'll add a handler for every button click in the window. You might want to give your StackPanel a name (like, "stackPanel1") and do it just for that container:
Instead of making
button1
,button2
etc, make a List of buttons.Then you can write:
From XAML you can attach the click handler to the parent of the buttons something like this (I use a StackPanel as an example):
This works because the buttons Click event is a bubbling routed event.
You could use Linq To VisualTree to locate all the buttons in your Window / UserControl, then iterate over this list adding your event handler.
I think that is about as concise as you are going to get it!