C# WPF实现鼠标拖动的代码片

本文详细介绍了使用C#和WPF实现鼠标拖动的两种策略,包括实时拖动和鼠标弹起时发生的操作。通过代码片段展示了如何监听鼠标左键的按下、移动和释放事件,以及如何计算鼠标拖动过程中的偏移量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C# WPF实现鼠标拖动的代码片
///可表示实时拖动
void xxx_PreviewMouseLeftButtonUp(System.Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    IsMouseLeftBtnDown = false;
    IsMouseLeftBtnUp = true;
}

/// <summary>
/// 是否按下鼠标左键
/// </summary>
private bool IsMouseLeftBtnDown = false;
/// <summary>
/// 是否松开鼠标左键
/// </summary>
private bool IsMouseLeftBtnUp = true;
/// <summary>
/// 鼠标拖动期间 x轴偏移量
/// </summary>
private double xOffset = 0;
/// <summary>
/// 鼠标按下点在X轴的位置
/// </summary>
private double xDown = 0;
/// <summary>
/// 鼠标松开点在X轴的位置
/// </summary>
private double xUp = 0;

void xxx_PreviewMouseLeftButtonDown(System.Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    IsMouseLeftBtnDown = true;
    IsMouseLeftBtnUp = false;

	xDown = e.GetPosition(this).X;
}

void xxx_PreviewMouseMove(System.Object sender, System.Windows.Input.MouseEventArgs e)
{
    if (IsMouseLeftBtnDown && !IsMouseLeftBtnUp)
    {
        xUp = e.GetPosition(this).X;
        xOffset = xDown - xUp;
        xDown = xMove;//改变当前鼠标按下位置,这样曲线就可以随着鼠标移动方向而准确移动

        txTagName8.Text = xOffset.ToString();
    }
}


///鼠标弹起时发生操作,这样就不是实时的了
void CurvePnl_PreviewMouseLeftButtonUp(System.Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    IsMouseLeftBtnDown = false;
    IsMouseLeftBtnUp = true;
    
    xUp = e.GetPosition(this).X;
    xOffset = xDown - xUp;
    xDown = xMove;//改变当前鼠标按下位置,这样曲线就可以随着鼠标移动方向而准确移动

    txTagName8.Text = xOffset.ToString();
}

/// <summary>
/// 是否按下鼠标左键
/// </summary>
private bool IsMouseLeftBtnDown = false;
/// <summary>
/// 是否松开鼠标左键
/// </summary>
private bool IsMouseLeftBtnUp = true;
/// <summary>
/// 鼠标拖动期间 x轴偏移量
/// </summary>
private double xOffset = 0;
/// <summary>
/// 鼠标按下点在X轴的位置
/// </summary>
private double xDown = 0;
/// <summary>
/// 鼠标松开点在X轴的位置
/// </summary>
private double xUp = 0;

void CurvePnl_PreviewMouseLeftButtonDown(System.Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    IsMouseLeftBtnDown = true;
    IsMouseLeftBtnUp = false;

    xDown = e.GetPosition(this).X;
}

void CurvePnl_PreviewMouseMove(System.Object sender, System.Windows.Input.MouseEventArgs e)
{
    if (IsMouseLeftBtnDown && !IsMouseLeftBtnUp)
    {
        //这里没有操作
    }
}

以上就是鼠标拖动的两种刷新策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值