Нажмите событие для элементов управления ниже других элементов управления - PullRequest
3 голосов
/ 01 июля 2010

У меня есть два элемента управления A и B. Элемент управления B размещен над A. Когда нажата B, вызывается только событие clicked, однако для срабатывания события A мне также нужно событие click.Можно ли это как-то реализовать с помощью перенаправленных событий?

Вот скриншот элементов управления:

alt text http://www.imagebanana.com/img/hu5znv4/buttons.png

Конечно, этот случай - всего лишь уменьшенный пример, яищу общий способ поднять события на всех элементах управления ниже курсора мыши / в одном месте.Однако конкретное решение этой проблемы мне тоже поможет!Большое спасибо за любую подсказку!

1 Ответ

2 голосов
/ 01 июля 2010

Это может произойти, если обработчик событий внутреннего элемента управления устанавливает для свойства e.Handled значение true.Это предотвратит дальнейшее всплытие перенаправленного события.Но я только что проверил и не вижу такого поведения в WPF 4.

Если e.Handled предотвращает ваше событие, вы можете, однако, использовать перегрузку UIElement.AddHandler , которая принимаетлогический параметр handledEventsToo, чтобы подключить событие click.Это должно быть сделано в коде, а не в разметке.Затем вы должны получить событие Click во внешнем элементе управления, и свойство e.Handled уже будет установлено в значение true.

Следующий код устанавливает фон обеих кнопок, когда я нажимаю внутреннюю кнопку.

<Grid>
    <Button VerticalAlignment="Center" HorizontalAlignment="Center" Click="Click1">
        <Button Width="100" Height="25" Margin="20" Click="Click2" />
    </Button>
</Grid>

Код позади

private void Click1( object sender, RoutedEventArgs e )
{
    ( (Button)sender ).Background = new SolidColorBrush( Colors.Blue );
}

private void Click2( object sender, RoutedEventArgs e )
{
    ( (Button)sender ).Background = new SolidColorBrush( Colors.Red );
    //e.Handled = true; // uncomment to stop bubbling
}
...