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

    现在Win8风格的应用程序越来越多了,这种风格看起来确实效果也挺好,页面的配色什么的还是美工比较擅长,我就试了一下按钮拖动的实现,这个在触摸屏上应该是比较常用的一个功能,具体的实现不外乎两种方式:

    1.使用画布重绘,把按钮放到canvas中实现。

    2.直接使用现成的控件,比如DevExpress中的TileLayoutControl控件来实现,跟第一种方式原理应该是一样的。

    第一种方式,我就做了一个最简单的实现,只是实现了拖动,移动过程中没有重绘,没有特效,为以后的扩展做一下准备吧:

    首先,添加一个canvas控件,在里面添加一个button。

    第二步,添加canvas的鼠标左键弹起事件,没错,只有这一个事件,对于最基础的移动来说,只需要记录画布的结束为止,指定即可。

    然后就是这个事件的实现了。

    private void canvas1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
       Point CurrentPosition = System.Windows.Input.Mouse.GetPosition(canvas1);
       Canvas.SetTop(e.Source as UIElement, CurrentPosition.Y);
       Canvas.SetLeft(e.Source as UIElement, CurrentPosition.X);
    }

    代码也很简单,设置canvas中button的位置,这个e.source就是button.

    Canvas 控件支持绝对定位并为其包含的控件提供最少的内置布局功能。Canvas 允许您将包含的控件放置在距离面板的任一角有一定偏移量的位置。Canvas 为包含的WPF容器控件提供四种属性:Top、Bottom、Right 和 Left。

    对于移动过程中重绘,我还没理解清楚,过段时间再写。关于WPF中的布局,有篇文章看着不错,大家可以看看,http://www.cnblogs.com/yayx/archive/2008/04/23/1167110.html

    这个例子还是有些问题的,拖动的时候按钮静止不动,给用户的感觉很不好,还有,移动的时候,两个button重叠的情况下,不会像stackpanel那样直接自动填充,使用控件,这些问题就不存在了。

    实现的效果。。。。

    至于控件的使用,我就不写了,网上多的是教程,DevExpress网站上应该也有demo。

  • 相关阅读:
    springboot(六):如何优雅的使用mybatis
    springboot(四):thymeleaf使用详解
    springboot(三):Spring boot中Redis的使用
    springboot(二):web综合开发
    Springboot(一):入门篇
    js判断对象的某个属性是否存在
    查看node.js全局安装的插件路径
    切片地图服务器
    element ui loading加载开启与关闭
    vue 引入 leaflet1.4.0
  • 原文地址:https://www.cnblogs.com/jinshizuofei/p/3409480.html
Copyright © 2011-2022 走看看