Кажется, что обработчик события MouseDown блокирует вызов обработчика события Click - PullRequest
1 голос
/ 19 октября 2019

Я делаю онлайн-курс по обработке событий в 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

    }
}

Результаты:

resulting app

В ходе нажатия на изображение запускаются все три обработчика событий, но когда я пробую его, только Grid_PreviewMouseDown и Image_MouseDown , Button_Click кажетсябыть полностью проигнорированным. Это ожидаемое поведение или я что-то здесь упускаю? Курс 2014 года между прочим.

Одна вещь, которую я заметил, это то, что Button_Click вызывается, только если я удаляю атрибут PreviewMouseDown из тега Grid и нажимаю насама кнопка (не на изображении внутри).

1 Ответ

1 голос
/ 19 октября 2019

Поскольку у нас закончились другие варианты, я предлагаю вам переустановить последнюю версию Visual Studio со всеми пакетами рабочей нагрузки, связанными с разработкой .NET Framework и WPF - в какой-то момент могло произойти некоторое повреждение.

...