现在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。