WPF туннелирование кнопки - PullRequest
0 голосов
/ 11 августа 2011

Это мой первый вопрос, поэтому, пожалуйста, будьте спокойны:)

Я новичок в WPF и настольных приложениях и изучаю обработку событий.Проходя через Bubbling и Tunneling, я нигде не могу найти пример, который объясняет, как использовать туннелирование на Button_Click.

В основном, когда я нажимаю кнопку, мне нужен родительский элемент управления (в данном случае сетка) для обработки событиясначала и сделайте несколько проверок, прежде чем позволить Button_Click иметь место.У меня проблема в том, что я могу использовать Grid_PreviewMouseDown для записи события, но это неоднозначно!Он не говорит мне (по крайней мере, я так думаю), какой элемент управления вызвал срабатывание обработчика.

Что я могу сделать, чтобы определить, что PreviewMouseDown был вызван нажатием кнопки?Или: Есть ли альтернатива / лучше было бы туннелировать Button_Click?

Спасибо

1 Ответ

1 голос
/ 11 августа 2011

В вашем обработчике вы должны проверить Source события, чтобы получить элемент управления, который его инициировал. Просто отметьте, что он не доступен только для чтения и может быть изменен, поэтому Source относится к другому элементу управления.

Вам, вероятно, повезет больше, если вы зарегистрируетесь в событии PreviewMouseLeftButtonDown, чтобы получать левые, а не просто щелчки.

Если ваш обработчик предназначен только для поиска левой кнопкой мыши, вы можете использовать этот код:

private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Button button = e.Source as Button;
    if (button != null)
    {
        // button is being clicked, handle it
    }
}
...