zoukankan      html  css  js  c++  java
  • WPF中实现砖块拖动的方法(2)

    这篇文章解决一下上一篇中剩下的问题,拖动的过程中,按钮的位置实时更新。

    本来是看的微软提供的例子,例子里面是使用的AdornerLayer来实现的,实现了一个Adorner类,但实际上不需要那么复杂,确定鼠标按下,然后拖动过程中实时更新控件位置,跟鼠标放开的时候做的事是一样的。

    代码如下:

    private bool _isDown;
    
    #region canvas的事件
    //鼠标左键按下事件
    private void canvas1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
       _isDown = true;
    }
    
    /// <summary>
    /// 鼠标左键弹起事件,是以鼠标左键按下为前提的
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void canvas1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
       UpdatePosition(e.Source as UIElement);
       _isDown = false;
    }
    
    /// <summary>
    /// 鼠标移动事件,是以鼠标左键按下为前提的
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void canvas1_PreviewMouseMove(object sender, MouseEventArgs e)
    {
       if (!_isDown)
         return;
       UpdatePosition(e.Source as UIElement);
    }
    #endregion
    
    /// <summary>
    /// 控件位置更新
    /// </summary>
    /// <param name="ui"></param>
    private void UpdatePosition(UIElement ui)
    {
       Point CurrentPosition = System.Windows.Input.Mouse.GetPosition(canvas1);
       Canvas.SetTop(ui, CurrentPosition.Y);
       Canvas.SetLeft(ui, CurrentPosition.X);
    }

    根据鼠标的位置来更新控件的位置,还是有点不太准确,微软的例子里面的AdornerLayer是来计算按钮实际位置跟鼠标位置的偏移量的,我的理解有误,微软的demo代码,点击这里查看。

  • 相关阅读:
    日志管理工具logrotate
    springboot2整合logback.xml动态修改日志打印级别
    mybatis框架之装饰模式
    mybatis源码分析之06二级缓存
    后勤信息反馈---场景描述
    《人月神话》读后感---计算机产品的文档
    android studio 使用第三方模拟器连接方法
    第八周总结
    Android Studio 和 SDK 下载、安装和环境变量配置
    求最大子数组并单步显示
  • 原文地址:https://www.cnblogs.com/jinshizuofei/p/3417206.html
Copyright © 2011-2022 走看看