WPF: 旋转Thumb后,DragDelta移动距离出错的解决
当Thumb跟随Grid旋转90度后,拖拽控件时会飞掉。
<Grid x:Name="gridMain" Width="100" Height="50" Background="Green" RenderTransformOrigin="0.5,0.5" Canvas.Left="100" Canvas.Top="100">
<Grid.RenderTransform>
<RotateTransform x:Name="rotate" Angle="90"></RotateTransform>
</Grid.RenderTransform>
<Thumb x:Name="thumbMain" Opacity="0.8" DragDelta="Thumb_DragDelta"></Thumb>
</Grid>
private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
Canvas.SetLeft(gridMain, Canvas.GetLeft(gridMain) + e.HorizontalChange);
Canvas.SetTop(gridMain, Canvas.GetTop(gridMain) + e.VerticalChange);
}
这是由于坐标系不统一造成的。Canvas.SeltLeft 和 Canvas.SetTop是用的Canvas坐标系。而Thumb的e.HorizontalChange 和 e.VerticalChange 是根据鼠标相对于Thumb自身坐标系计算出来的, 两个坐标系有个90度的角度差。将e.HorizontalChange 和 e.VerticalChange转换到Canvas的坐标系下,拖拽就没问题了。如下:
private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
Point ptChange = rotate.Transform(new Point(e.HorizontalChange, e.VerticalChange));
Canvas.SetLeft(gridMain, Canvas.GetLeft(gridMain) + ptChange.X);
Canvas.SetTop(gridMain, Canvas.GetTop(gridMain) + ptChange.Y);
}
WPF: 旋转Thumb后,DragDelta移动距离出错的解决的更多相关文章
- Win7安装Oracle Instantclient ODBC驱动 后配置DSN时出错的解决办法 SQORAS32
安装过程简述 oracle官网下载了 instantclient-odbc-nt--.zip instantclient-basic-nt-.zip 我这是32位版的win7,按照需要下载对应的版本. ...
- asp.net core 1.1 升级后,操作mysql出错的解决办法。
遇到问题 core的版本从1.0升级到1.1,操作mysql数据库,查询数据时遇到MissingMethodException问题,更新.插入操作没有问题. 如果你也遇到这个问题,请参照以下步骤进行升 ...
- 虚拟机中安装Ubuntu后,安装VMwareTools出错的解决办法:Not enough free space to extract VMwareTools
1.选择安装VMwareTools 2.将加载后的Vmware Tools中的*.tar.gz文件,复制到桌面后提取,否则会报错: 3.然后进入提取后的文件下,运行终端 sudo ./vmware-i ...
- WPF动画结束后的行为方式
原文:WPF动画结束后的行为方式 在WPF中可以使用Animation来完成动画功能,如移动,旋转等,最近写的一个程序需要实现控件的移动,包括自动移动和手动控制.原理很简单,就是改变控件的Margin ...
- WPF旋转的界面实现
原文:WPF旋转的界面实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/1821534 ...
- mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...
- WPF发布程序后未授予信任的解决办法
WPF发布程序后未授予信任的解决办法 基于浏览器的WPF应用程序由于需要比较高的操作权限,所以在项目的安全性属性中选择了“这是完全可信的应用程序”选项.可是,在发布部署后,在其他电脑上打开xbap文件 ...
- vb.net WPF webbrowser window.close 关闭后不触发 WindowClosing 事件 WNDPROC解决方式
vb.net WPF webbrowser window.close 关闭后不触发 WindowClosing 事件 WNDPROC解决方式 #Region "WPF 当浏览器窗体关闭 ...
- MySQL5.1升级5.6后,执行grant出错:ERROR 2013 (HY000): Lost connection to MySQL server during query【转载】
转载: MySQL5.5升级5.6后,执行grant出错:ERROR 2013 (HY000): Lost connection to -mysql教程-数据库-壹聚教程网http://www.111 ...
随机推荐
- qt_计算器的简单实现
//阶乘不知道怎么实现不了/(ㄒoㄒ)/~~,以后慢慢调试吧......... //转换为后缀表达式,实现最主要功能 void MainWindow::toPostfix () { QString e ...
- Innodb之表空间转移
我们可以将数据表转移到其他磁盘,以减弱单个磁盘的IO. 如 1创建一个表空间: 2修改表以使用新的表空间,如果表有大量数据,则会需要一些时间重建:所以会锁表一段时间: Note:会将原有的表空间删除, ...
- Struts2拦截器之ExceptionMappingInterceptor(异常映射拦截器)
一.异常拦截器是什么? 异常拦截器的作用是提供一个机会,可以设置在action执行过程中发生异常的时候映射到一个结果字符串而不是直接中断. 将异常整合到业务逻辑中,比如在分层系统的调用中可以从底层抛出 ...
- 20145206邹京儒《Java程序设计》第4周学习总结
20145206 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 6.1 何谓继承 继承基本上就是避免多个类间重复定义共同行为 package cc.openhome; pu ...
- php 上传文件实例 上传并下载word文件
上传界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- Eclipse 控制console
http://blog.csdn.net/leidengyan/article/details/5686691
- .net学习之进程外Session的配置
转载地址:http://www.cnblogs.com/rohelm/archive/2012/05/13/2498465.html 人人都知道怎么去使用session,但是初学者,尤其是自学的学生可 ...
- oracle限制ip訪問
我這oracle版本為11.2.0.4,裝的GRID,所以在grid用戶下編輯sqlnet.ora 1.cd /grid/product/11.2.0/network/admin 2.編輯sqlne ...
- Hbuilder连接模拟器调试
Hbuilder是一个非常好用的HTML5开发IDE,我最喜欢的功能就是连接手机调试了,连接手机调试有两种途径,一是通过USB连接真机,二是下载安装一个安卓模拟器,让Hbuilder连接到安卓模拟器, ...
- 信号通讯编程,王明学learn
信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...