WPF : 以鼠标指针为中心缩放
来源:互联网 发布:巨人网络代码多少 编辑:程序博客网 时间:2024/04/27 08:05
XMAL:
<Canvas
x:Name="mCanvas"
MouseWheel="mCanvas_MouseWheel"
Background="Wheat"
>
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="mScaleTf" ScaleX="1.0" CenterX="0"></ScaleTransform>
<TranslateTransform x:Name="mTranslateTf" X="10" Y="20"></TranslateTransform>
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>
------------------------------------------------------------------------------------------------------
Code:
private void mCanvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
Point zoomCenter = e.GetPosition(this.mCanvas);//参数必须是this.mCanvas, e.GetPosition和RenderTransform有关?
//或者:
//Point screenPos = e.GetPosition(this);
//Point zoomCenter = this.mCanvas.RenderTransform.Inverse.Transform(screenPos);
Point pt = this.mCanvas.RenderTransform.Inverse.Transform(zoomCenter);
this.mTranslateTf.X = (zoomCenter.X - pt.X) * this.mScaleTf.ScaleX ;
this.mTranslateTf.Y = (zoomCenter.Y - pt.Y) * this.mScaleTf.ScaleY;
this.mScaleTf.CenterX = zoomCenter.X;
this.mScaleTf.CenterY = zoomCenter.Y;
this.mScaleTf.ScaleX += e.Delta / 1000.0;
this.mScaleTf.ScaleY += e.Delta / 1000.0;
Console.WriteLine("MouseWheel : " + zoomCenter.ToString());
}
或者
private void mCanvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
Point mousePos = e.GetPosition(this);
//oldCenter : untransformed and transformed
Point untransformedOldCenter = new Point(this.mScaleTf.CenterX, this.mScaleTf.CenterY);
Point transformedOldCenter = this.mScaleTf.Transform(untransformedOldCenter);
//newCenter : untransformed and transformed
Point untransformedNewCenter = this.mCanvas.RenderTransform.Inverse.Transform(mousePos);
Point transformedNewCenter = mousePos;
double adjustX = transformedNewCenter.X - transformedOldCenter.X - untransformedNewCenter.X + untransformedOldCenter.X;
//update transforms
this.mTranslateTf.X = adjustX;
this.mScaleTf.CenterX = untransformedNewCenter.X;
this.mScaleTf.ScaleX += 0.1;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ruanruoshi/archive/2009/09/25/4593366.aspx
- WPF : 以鼠标指针为中心缩放
- WPF : 以鼠标指针为中心缩放
- 以鼠标为中心缩放图片
- [转]以鼠标为中心缩放图片
- js实现鼠标滚轮滚动以当前鼠标焦点为中心缩放
- MFC GDI+实现以鼠标为中心缩放图片(并且可以拖动)
- Flex使用Scroller组件实现以鼠标为中心的缩放
- MFC GDI+实现以鼠标为中心缩放图片(并且可以拖动)
- winform 以光标指向点为中心 通过鼠标滚轮对图片进行缩放
- MFC GDI+实现以鼠标为中心缩放图片(并且可以拖动)
- 以某点为中心缩放视图
- MFC+Direct2D以屏幕中心为中心缩放的实现
- Raphael Js实现以鼠标中心缩放paper
- 鼠标为中心缩放控件的底层代码
- iOS MKMapView 以某一坐标为中心进行缩放
- iOS 设置锚点,以锚点为中心缩放
- 以角色为中心通过鼠标控制镜头旋转
- 鼠标移上去以中心为原点慢慢出现
- [VB.Net]获取对象的指针及结构体与字节数组间的相互转化
- WritePrivateProfileString() 用法
- 关于fgetcsv ,二进制csv文件得不得到中文字符
- 如何编写Linux设备驱动程序
- 指针的强制类型转换
- WPF : 以鼠标指针为中心缩放
- svn diff输出结果的格式
- 基于svn diff结果的有效代码量统计
- 交通灯管理系统视频学习
- svn基础
- U-Boot在44B0X开发板上的移植以及代码分析
- virtio学习总结
- PCI 原理
- c#协变与逆变