C# MouseDown事件处理程序似乎阻止了Click事件处理程序的调用
我正在做一个关于WPF事件处理的在线课程。在关于隧道和冒泡事件的一节中,我被告知使用以下代码示例来跟踪触发的事件序列(使用断点): 查看:C# MouseDown事件处理程序似乎阻止了Click事件处理程序的调用,c#,wpf,xaml,event-handling,C#,Wpf,Xaml,Event Handling,我正在做一个关于WPF事件处理的在线课程。在关于隧道和冒泡事件的一节中,我被告知使用以下代码示例来跟踪触发的事件序列(使用断点): 查看: <Grid PreviewMouseDown="Grid_PreviewMouseDown"> <Button Name="btnFirst" Width="200" Height="200" Click="Button_Click"> <Image MouseDown="Image_MouseDown"
<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="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
}
}
在此过程中,单击图像会触发所有三个事件处理程序,但当我尝试此操作时,只有网格预览鼠标向下和图像鼠标向下被调用,按钮单击似乎被完全忽略。这是一种预期的行为还是我遗漏了什么?课程从2014年开始
我注意到的一件事是,只有当我从网格标记中删除PreviewMouseDown属性并单击按钮本身(而不是在内部图像上)时才会调用按钮。\u Click。因为我们没有其他选项,我建议您使用与.NET Framework和WPF开发相关的所有工作负载包重新安装最新版本的Visual Studio-可能在某个时候出现了一些损坏。我无法重现此问题,单击按钮或其中的图像时会调用所有三个事件。您在
按钮\u单击处理程序的代码示例中编写了“//Breakpoint goes here”,这是否意味着它正在按预期工作?这令人困惑。另外,我在代码中没有看到它,但请确保不要在图像\u MouseDown
处理程序中写入e.Handled=true
,因为它确实会停止事件传播。@corentpane“breakpoint goes here comment”指示我在Visual Studio中放置断点的位置,以检查调用了哪些方法。方法是空的,没有代码设置事件的Handled属性。哦,好吧,我误解了,我想你的意思是断点在你放评论的地方,我错了。这对你不起作用,真奇怪。你能上传并分享你的整个解决方案吗?这样我可以更仔细地看一看。@corentpane,好了:你刚刚上传了一个空项目,您的主窗口中没有代码,也没有xaml
:/原来这是我的Visual Studio 2017版本的一个问题-通过Visual Studio安装程序进行更新完全解决了这个问题。谢谢你的帮助,干杯!