Я делаю онлайн-курс по обработке событий в WPF. В разделе о туннелировании и всплывающих событиях мне сказали использовать следующий пример кода для отслеживания последовательности запускаемых событий (с использованием точек останова):
View:
<Grid PreviewMouseDown="Grid_PreviewMouseDown">
<Button Name="btnFirst" Width="200" Height="200" Click="Button_Click">
<Image MouseDown="Image_MouseDown" Source="Assets/pic.jpg"></Image>
</Button>
</Grid>
Кодовый код:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{ // Breakpoint goes here
}
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{ // Breakpoint goes here
}
private void Button_Click(object sender, RoutedEventArgs e)
{ // Breakpoint goes here
}
}
Результаты:
В ходе нажатия на изображение запускаются все три обработчика событий, но когда я пробую его, только Grid_PreviewMouseDown и Image_MouseDown , Button_Click кажетсябыть полностью проигнорированным. Это ожидаемое поведение или я что-то здесь упускаю? Курс 2014 года между прочим.
Одна вещь, которую я заметил, это то, что Button_Click вызывается, только если я удаляю атрибут PreviewMouseDown из тега Grid и нажимаю насама кнопка (не на изображении внутри).