wpf Button.MouseLeftButtonDown根本不起作用

Sta*_*lfi 8 c# wpf mouseleftbuttondown

我试图了解MouseLeftButtonDown如何工作,但直到现在还没有.

当我点击按钮时,没有任何内容.

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Name="sss">
            <Button x:Name="b1" Height="213" MouseLeftButtonDown="sss_MouseDown"/>
        </StackPanel>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

代码背后是:

private void sss_MouseDown(object sender, MouseButtonEventArgs e)
        {
            MessageBox.Show("3   ->>>>>" + ((Control)sender).Name);
        }
Run Code Online (Sandbox Code Playgroud)

Avi*_*til 14

尝试简单的PreviewMouseLeftButtonDown事件


Dan*_*zey 8

从此活动的文档:

某些控件类可能具有鼠标按钮事件的固有类处理.鼠标左键按下事件是在控件中进行类处理的最可能事件.类处理通常将基础Mouse类事件标记为已处理.一旦事件被标记为已处理,则通常不会引发附加到该元素的其他实例处理程序.在UI树中朝向根的冒泡方向上附加到元素的任何其他类或实例处理程序通常也不会引发.

因此,在短期:按钮很可能处理该事件,以产生它自己MouseDownMouseClick事件.因为按钮将事件标记为已处理,所以不会调用您自己的处理程序.请尝试使用其中一个更标准的事件.

该页面还列出了几个解决方法,但通常我会避开这些并使用更标准的解决方案.

  • 然后WPF希望我猜猜哪个事件会起作用?!?! (4认同)
  • 不,它希望您阅读其文档。通常,您会使用 `Click` 事件与按钮交互 - 使用 `MouseLeftButtonDown` 是非常罕见的事情! (2认同)

小智 7

我遇到了同样的问题,但改用了 PreviewMouseLeftButtonDown 事件。那奏效了。