Расшифровка, какой элемент управления вызвал событие - PullRequest
3 голосов
/ 20 мая 2010

У меня есть приложение с множеством изображений, которые выглядят одинаково и выполняют похожие задачи:

<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" />

Теперь я хочу связать каждый из них с одним и тем же обработчиком событий:

private void image_MouseDown(object sender, MouseButtonEventArgs e)
        {
            //this_program = ???;
            //this_slot = ???;
            //slots[this_program][this_slot] = some value;
        }

Очевидно, что номер программы и номер слота изображения являются частью его имени. Есть ли способ извлечь эту информацию при запуске обработчика событий?

1 Ответ

6 голосов
/ 20 мая 2010

Да, это возможно.

Как следует из названия, параметр sender содержит объект, вызвавший событие.

Вы также можете использовать присоединенные свойства Grid для удобства, чтобы определить, в какой строке и столбце он находится. (Также можно получить другие присоединенные свойства таким образом.)

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

Примечание:

Вы также можете использовать свойство Tag для хранения пользовательской информации об элементах управления. (Может хранить любые объекты.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...