views:

44

answers:

1

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?

+5  A: 

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.)

Venemo
+1. It's also possible to compare 'sender' with each member variable to see which control it is
Isak Savo
Thanks! Yes, that is also possible.
Venemo