2010-04-15 667 views
4

我只能在WPF中的图片上找到MouseDown事件和MouseUp事件。 这会导致一些问题,如果我在某些图像上执行MouseDown,则在某些其他图像上移动鼠标和MouseUp事件。 是否有任何其他事件可以用来解决此问题。像ButtonClick事件的Button元素。WPF:图片点击事件

回答

9

如果您确实必须使用图片,那么您可以执行一些操作来检查“点击”。

  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事件,再次。

4

您确定只需要一张图片,或者您是否真的想要一个图片作为内容的按钮?带有图像的按钮将具有点击事件。