MouseDown 事件处理程序似乎阻止调用 Click 事件处理程序

MouseDown event handler seem to block Click event handler from being invoked

我正在开设有关 WPF 事件处理的在线课程。在有关隧道和冒泡事件的部分中,我被告知使用以下代码示例来跟踪触发事件的顺序(使用断点):

查看:

<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_PreviewMouseDownImage_MouseDown 被调用,Button_Click 似乎被完全忽略了。这是预期的行为还是我在这里遗漏了什么?该课程是从 2014 年开始的。

我注意到的一件事是 Button_Click 仅当我从 Grid 标记中删除 PreviewMouseDown 属性时才会被调用然后我点击按钮本身(而不是里面的图片)。

由于我们 运行 没有其他选择,我建议您重新安装最新版本的 Visual Studio 以及与 .NET Framework 和 WPF 开发相关的所有工作负载包 - 可能有一些在某些时候腐败。