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。

 

 

posted @ 2013-11-05 22:47  _倔强  阅读(690)  评论(0编辑  收藏  举报