在 mousebuttonup 之前检查 mousebuttondown 之后的时间

Check time after a mousebuttondown before the mousebuttonup

我想这应该只是一个小问题,但我想不明白。有人有想法吗?

我在 canvas 上有一些边框(充满图像),我想单击边框(我使用 OnMouseLeftButtonDown 执行此操作),边框变红(这样用户可以确定是哪个对象他点击了)然后,在 1 或 2 秒后,当鼠标按钮仍被按下时,应该开始拖放。

一开始我是按钮里面有边框,但是clickevent好像和dragevent冲突了。所以我摆脱了按钮,直接在边框内完成所有操作,效果也很好。但是如何在 mousebuttondown 之后开始拖动并在时间用完之前发生 mousebuttonup 时停止拖动。

有人想出一个干净的解决方案吗?

private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    _source = sender as Border;
    Mouse.Capture(_source);
}

private void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    _source = null;
    Mouse.Capture(null);
}

在 OnMouseMove 事件中,您可以根据鼠标位置修改边框边距,但在检查 _source 是否为边框类型之后。

var position = e.GetPosition(Canvas);

编辑: 那时你可以添加 属性 Stopwatch _watch,在 OnMouseLeftButtonDown 事件处理程序中你可以这样做:

_watch = Stopwatch.StartNew();

在 OnMouseLeftButtonUp 中:

_watch.Stop();

在您的代码之前的 OnMouseMove 中:

while (_watch.ElapsedMilliseconds < 2000 && _watch.IsRunning)
{
    Thread.Sleep(100);
}