Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MouseDown事件处理程序似乎阻止了Click事件处理程序的调用_C#_Wpf_Xaml_Event Handling - Fatal编程技术网

C# MouseDown事件处理程序似乎阻止了Click事件处理程序的调用

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"

我正在做一个关于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 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安装程序进行更新完全解决了这个问题。谢谢你的帮助,干杯!