鼠标单击拖动事件 WPF

16
我正在开发一个模拟时钟选择器控件。 用户可以点击分钟或小时指针并拖动以旋转指针以选择特定时间。我想知道如何检测这样的点击和拖动事件。 我尝试使用 MouseLeftButtonDown + MouseMove,但我无法使其正常工作,因为无论何时发生鼠标移动,MouseMove 都会被触发,尽管我使用了标志。是否有更简单的方法?
public bool dragAction = false;

private void minuteHand_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    dragAction = true;
    minuteHand_MouseMove(this.minuteHand, e);
}

private void minuteHand_MouseMove(object sender, MouseEventArgs e)
{
    if (dragAction == true)
    {
       //my code: moving the needle
    }
 }

 private void minuteHand_MouseLeftButtonUp(object sender, MouseEventArgs e)
 {
    dragAction = false;
 }
3个回答

9
我认为这是最简单和直接的方法:
 private void Window_MouseMove(object sender, MouseEventArgs e) {
     if (e.LeftButton == MouseButtonState.Pressed) {
        this.DragMove();
     }
 }

5
public bool dragAction = false;

private void minuteHand_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    dragAction = true;
    minuteHand_MouseMove(this.minuteHand, e);
}

private void minuteHand_MouseMove(object sender, MouseEventArgs e)
{
    if (dragAction == true)
    {
       this.DragMove();
    }
 }

 private void minuteHand_MouseLeftButtonUp(object sender, MouseEventArgs e)
 {
    dragAction = false;
 }

做得到。

这不就和原帖一样吗? - Jonathan Tuzman
this.DragMove() 函数 - Nick Prozee

4
你可以使事情更加简单,不需要处理鼠标按下/松开事件:
private void minuteHand_MouseMove(object sender, MouseEventArgs e)
{
    if (Mouse.LeftButton == MouseButtonState.Pressed)
    {
        //my code: moving the needle
    }
 }    

我希望用户可以点击并拖动而不是仅仅移动鼠标。 - Ji yong
在wpf的拖放中,始终使用PreviewMouseDown。这样你就可以通过MouseMove使其工作。(MousDown是冒泡的,不适合拖放) - deafjeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接