WPF:图像点击事件

4

在WPF中,我只能找到MouseDown事件和MouseUp事件,但是如果我在某个图像上按下鼠标,移动鼠标并且MouseUp事件发生在另一张图像上,这会导致一些问题。是否有其他事件可以用来解决这个问题,例如Button元素的MouseClick事件。

2个回答

10

如果你确实必须使用图像,那么你可以进行一些检查来判断是否“点击”了它:

  1. 检查两个事件之间的时间。如果小于你设定的阈值,则将鼠标弹起视为单击。你需要存储鼠标按下事件的时间。

  2. 检查两个事件的 sender 是否相同。同样需要存储鼠标按下事件的 sender

你可能还想检查是否按下和释放的是鼠标左键。

结合上述两点:

    private DateTime downTime;
    private object downSender;

    private void Image_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            this.downSender = sender;
            this.downTime = DateTime.Now;
        }
    }

    private void Image_MouseUp(object sender, MouseButtonEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Released &&
            sender == this.downSender)
        {
            TimeSpan timeSinceDown = DateTime.Now - this.downTime;
            if (timeSinceDown.TotalMilliseconds < 500)
            {
                // Do click
            }
        }
    }

实际上还有第三种方法:检查鼠标位置。

    private Point downPosition;

保存位置:

    this.downPosition = e.GetPosition(sender as Image);

然后在MouseUp事件中再次检查它,使用容差值。


5

您确定只需要一张图片,还是需要一个以图片为内容的按钮?带有图片的按钮将具有点击事件。


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