WPF 实现地图的移动和滚动放大
2011-04-16 11:37
281 查看
刚进新公司做的是流水线的仿真系统,其中涉及到要实现放大和滚动的效果,现在来记录一下:
放大缩小效果:
this.canvas 修改成您需要放大的控件。
并在this.canvas里面添加滚轮事件MouseWheel="canvas_MouseWheel"
在canvas里面添加如下代码:
控件移动效果
想再做一个旋转的效果,不过还没实现,有经验的欢迎赐教。
放大缩小效果:
/// <summary> /// 放大缩小方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void canvas_MouseWheel(object sender, MouseWheelEventArgs e) { double ScaleX = 0; double ScaleY = 0; double dbl_ZoomX = ((ScaleTransform)(((TransformGroup)(((UIElement)(this.canvas)).RenderTransform)).Children[0])).ScaleX; double dbl_ZoomY = ((ScaleTransform)(((TransformGroup)(((UIElement)(this.canvas)).RenderTransform)).Children[0])).ScaleY; ((ScaleTransform)(((TransformGroup)(((UIElement)(this.canvas)).RenderTransform)).Children[0])).CenterX = e.GetPosition(canvas).X; ((ScaleTransform)(((TransformGroup)(((UIElement)(this.canvas)).RenderTransform)).Children[0])).CenterY = e.GetPosition(canvas).Y; if (e.Delta < 0) { ScaleX = dbl_ZoomX - 0.1 < 1 ? 0 : dbl_ZoomX - 0.1; ScaleY = dbl_ZoomY - 0.1 < 1 ? 0 : dbl_ZoomY - 0.1; } else if (e.Delta > 0) { ScaleX = dbl_ZoomX + 0.1 > 10.0 ? 10.0 : dbl_ZoomX + 0.1; ScaleY = dbl_ZoomY + 0.1 > 10.0 ? 10.0 : dbl_ZoomY + 0.1; } ((ScaleTransform)(((TransformGroup)(((UIElement)(this.canvas)).RenderTransform)).Children[0])).ScaleX = ScaleX; ((ScaleTransform)(((TransformGroup)(((UIElement)(this.canvas)).RenderTransform)).Children[0])).ScaleY = ScaleY; }
this.canvas 修改成您需要放大的控件。
并在this.canvas里面添加滚轮事件MouseWheel="canvas_MouseWheel"
在canvas里面添加如下代码:
<Canvas.RenderTransform> <TransformGroup> <ScaleTransform ScaleX="1" ScaleY="1"/> <SkewTransform/> <RotateTransform/> <TranslateTransform/> </TransformGroup> </Canvas.RenderTransform>
控件移动效果
/// <summary> /// 鼠标移动方法 /// </summary> Point a; protected Thickness UCMargin; private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { this.MouseMove += new MouseEventHandler(Window1_MouseMove); a = e.GetPosition(this); if (a.X > 0 && a.Y > 0) { UCMargin = canvas.Margin; } } void Window1_MouseMove(object sender, MouseEventArgs e) { if (e.LeftButton != MouseButtonState.Released) { this.Cursor = Cursors.SizeAll; this.MouseLeftButtonUp += new MouseButtonEventHandler(Window1_MouseLeftButtonUp); Point PCurrent = e.GetPosition(this); double x = UCMargin.Left + PCurrent.X - a.X; double y = UCMargin.Top + PCurrent.Y - a.Y; canvas.Margin = new Thickness(x, y, 0, 0); } else { this.MouseMove -= new MouseEventHandler(Window1_MouseMove); this.Cursor = null; } } void Window1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { this.Cursor = null; this.MouseMove -= new MouseEventHandler(Window1_MouseMove); }
想再做一个旋转的效果,不过还没实现,有经验的欢迎赐教。
相关文章推荐
- WPF下实现图片的放大缩小移动
- WPF下实现图片的放大缩小移动
- wpf下实现图片的放大缩小和平移
- iOS- 用MapKit和CoreLocation 来实现移动设备(地图与定位)
- ImageView通过matrix实现手势缩放,放大,缩小 ,移动
- 实现地图放大(拉框和单击)、缩小(拉框和单击)、漫游操作的简易代码
- WPF窗体关闭/放大/缩小按钮禁用、隐藏的实现
- 自定义ScollView,根据ScollView滚动,改变头部搜索框,以及实现缓解用户焦虑整体布局移动
- WPF实现滚动显示的TextBlock
- Android游戏开发实践之人物移动地图的平滑滚动处理
- NGUI实现小地图,人物图标不动,地图移动
- jquery插件实现鼠标移动到中国地图提示框地区数据提示的特效
- arcims开发经验总结(2) (地图放大缩小、鹰眼实现逻辑)
- cocos2d-x 实现地图随双指移动
- Android 游戏开发之主角的移动与地图的平滑滚动
- 在WPF里面实现以鼠标位置为中心缩放移动图片
- wpf下实现图片的放大缩小和平移
- iPhone开发之UIScrollView滚动组件的使用(二) 拖线实现按钮控制大图移动利用contentOffset属性
- WPF <ZoomableCanvas> 实现缩放移动
- cocos2d-js 实现双指缩放地图效果 和 单点移动效果