Deciphering which control fired an event

.net, c#, event-handling, wpf, xaml

Solution

Yes, it is possible.

As its name suggests, the `sender` parameter contains the object which fired the event.

You can also use the `Grid`'s attached properties for convenience to determine which row and column it is in. (It is also possible to get other attached properties this way.)

private void image_MouseDown(object sender, MouseButtonEventArgs e)
{
    // Getting the Image instance which fired the event
    Image image = (Image)sender;

    string name = image.Name;
    int row = Grid.GetRow(image);
    int column = Grid.GetRow(image);

    // Do something with it
    ...
}

Side note:

You can also use the `Tag` property to store custom information about controls. (It can store any objects.)

Problem

I have an application with many images that all look the same and perform similar tasks: ``` <Image Grid.Column="1" Grid.Row="0" Name="image_prog1_slot0" Stretch="Uniform" Source="bullet-icon.png" StretchDirection="Both" MouseDown="image_prog1_slot0_MouseDown"/> <Image Grid.Column="1" Grid.Row="1" Name="image_prog1_slot1" Stretch="Uniform" Source="bullet-icon.png" StretchDirection="Both" /> <Image Grid.Column="1" Grid.Row="2" Name="image_prog1_slot2" Stretch="Uniform" Source="bullet-icon.png" StretchDirection="Both" /> ``` Now, I want to link each one to the same event handler: ``` private void image_MouseDown(object sender, MouseButtonEventArgs e) { //this_program = ???; //this_slot = ???; //slots[this_program][this_slot] = some value; } ``` Obviously the program number and slot number of the image are part of its name. Is there a way to extract this information when the event handler is fired?

Original source