Нажмите событие для элементов управления ниже других элементов управления
У меня есть два элемента управления A и B. Элемент управления B размещен над A. Когда нажимается только B, запускается событие clicked, однако мне нужно также запускать событие click для A. Можно ли это как-то реализовать с помощью перенаправленных событий?
Вот скриншот элементов управления:
http://www.imagebanana.com/img/hu5znv4/buttons.png
Конечно, этот случай - только сокращенный пример, я ищу общий способ вызывать события на всех элементах управления под курсором мыши / в одном месте. Однако конкретное решение этой проблемы мне тоже поможет! Большое спасибо за любую подсказку!
1 ответ
Это может произойти, если обработчик события внутреннего элемента управления устанавливает для свойства 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
}