【问题标题】:Check time after a mousebuttondown before the mousebuttonup在 mousebuttonup 之前检查 mousebuttondown 之后的时间
【发布时间】:2015-07-23 12:14:23
【问题描述】:

我认为这一定只是一个小问题,但我无法清楚地了解这一点。有人出主意吗?

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

起初我在按钮内有边框,但点击事件似乎与拖动事件冲突。所以我去掉了按钮,直接在边界内做所有事情,这也很好。但是如何在 mousebuttondown 之后开始拖动并在 mousebuttonup 在时间用完之前发生时停止它。

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

【问题讨论】:

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


    【解决方案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();
    

    并在代码之前的 OnMouseMove 中:

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

    【讨论】:

    • 好的,我不得不稍微调整一下,但直到现在我还不知道秒表对象。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多