在WPF中,我只能找到MouseDown事件和MouseUp事件,但是如果我在某个图像上按下鼠标,移动鼠标并且MouseUp事件发生在另一张图像上,这会导致一些问题。是否有其他事件可以用来解决这个问题,例如Button元素的MouseClick事件。
在WPF中,我只能找到MouseDown事件和MouseUp事件,但是如果我在某个图像上按下鼠标,移动鼠标并且MouseUp事件发生在另一张图像上,这会导致一些问题。是否有其他事件可以用来解决这个问题,例如Button元素的MouseClick事件。
如果你确实必须使用图像,那么你可以进行一些检查来判断是否“点击”了它:
检查两个事件之间的时间。如果小于你设定的阈值,则将鼠标弹起视为单击。你需要存储鼠标按下事件的时间。
检查两个事件的 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
事件中再次检查它,使用容差值。
您确定只需要一张图片,还是需要一个以图片为内容的按钮?带有图片的按钮将具有点击事件。