WPF中的Button.MouseLeftButtonDown完全不起作用

11

我正在尝试学习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>

代码后台是:

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

你的后台代码是什么样子的?当左键按下时,你想要实现什么功能? - Oren Hizkiya
请问您能否解释一下错误是什么? - Avinash patil
编辑的内容 - Stav Alfi
为什么不使用单击事件? - Asik
我有同样的问题,我想知道为什么这个事件存在,如果您根本无法使用它。 更糟的是:如果您尝试使用MouseButtonDown事件,这将适用于除左鼠标按钮之外的所有鼠标按钮。 谢谢,微软,做得好。 - Nico
3个回答

22

尝试简单使用 PreviewMouseLeftButtonDown 事件


1
是的,你说得对,但是难道我不能使用MouseLeftButtonDown吗? - Stav Alfi

9
此事件的文档中可以得知:

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

因此,简而言之,按钮可能正在处理此事件以生成自己的MouseDownMouseClick事件。由于按钮将事件标记为已处理,您自己的处理程序没有被调用。尝试使用更标准的事件之一。

页面还列出了一些解决方法,但通常我会避免使用这些方法,而使用更标准的解决方案。


10
那WPF希望我猜测哪个事件会起作用?!?! - Stav Alfi
2
不是的,它期望你阅读它的文档。通常情况下,你会使用Click事件来与按钮进行交互 - 使用MouseLeftButtonDown是相当罕见的事情! - Dan Puzey

7

我曾经遇到过同样的问题,但是我使用了PreviewMouseLeftButtonDown事件。这个方法行得通。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接