WPF : 以鼠标指针为中心缩放
来源:互联网 发布:php特殊字符转义 编辑:程序博客网 时间:2024/03/28 18:07
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;
}
- WPF : 以鼠标指针为中心缩放
- WPF : 以鼠标指针为中心缩放
- 以鼠标为中心缩放图片
- [转]以鼠标为中心缩放图片
- js实现鼠标滚轮滚动以当前鼠标焦点为中心缩放
- MFC GDI+实现以鼠标为中心缩放图片(并且可以拖动)
- Flex使用Scroller组件实现以鼠标为中心的缩放
- MFC GDI+实现以鼠标为中心缩放图片(并且可以拖动)
- winform 以光标指向点为中心 通过鼠标滚轮对图片进行缩放
- MFC GDI+实现以鼠标为中心缩放图片(并且可以拖动)
- 以某点为中心缩放视图
- MFC+Direct2D以屏幕中心为中心缩放的实现
- Raphael Js实现以鼠标中心缩放paper
- 鼠标为中心缩放控件的底层代码
- iOS MKMapView 以某一坐标为中心进行缩放
- iOS 设置锚点,以锚点为中心缩放
- 以角色为中心通过鼠标控制镜头旋转
- 鼠标移上去以中心为原点慢慢出现
- 绿茶贮存五忌
- C++问题---字符串逆转问题
- MyEclipse打不开
- 初来炸到
- instanceof关键字
- WPF : 以鼠标指针为中心缩放
- AS3中的数据类型
- C++问题---逆波兰表达转换与计算问题
- linux下装QQ,64位系统
- LINUX环境进程间通信
- 在 Eclipse 中配置编译 Pro*C
- 批处理:Ping结果前加上时间并把结果保存为txt文件
- 在C#中使用的Win32消息列表
- 使用WinDbg调试USB Bus Driver之点滴随记