在鼠标按钮之前按下鼠标按钮后检查时间

时间:2015-07-23 12:14:24

标签: c# wpf drag-and-drop wpf-controls mouseevent

我认为这一定只是一个小问题,但我无法对此做出明确的考虑。有人有想法吗?

我在画布上有一些边框(填充图像),我想点击边框(我用OnMouseLeftButtonDown执行此操作)边框变红(因此用户确定他点击了哪个对象)然后在1或2秒后,当按下鼠标按钮时,应该开始拖动。

起初我有按钮内的边框,但是clickevent似乎与dragevent冲突。所以我摆脱了按钮,直接在边框内做了一切,效果也很好。但是如何在鼠标按钮之后启动拖动并在时间用完之前发生鼠标按钮时停止拖动。

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

1 个答案:

答案 0 :(得分:1)

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是否为Border类型之后。

var position = e.GetPosition(Canvas);

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

_watch = Stopwatch.StartNew();
OnMouseLeftButtonUp中的

_watch.Stop();

并在代码之前的OnM​​ouseMove中:

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