WPF : 以鼠标指针为中心缩放
2008-07-09 22:46
218 查看
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;
}
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 : 以鼠标指针为中心缩放
- 在WPF里面实现以鼠标位置为中心缩放移动图片
- 在WPF里面实现以鼠标位置为中心缩放移动图片
- 艾伟_转载:在WPF里面实现以鼠标位置为中心缩放移动图片
- WPF 鼠标滚轮对图片的缩放
- WPF通过鼠标滑轮缩放显示图片
- js实现鼠标滚轮滚动以当前鼠标焦点为中心缩放
- 基本几何变换——以鼠标为中心进行缩放
- [WPF]获取鼠标指针下的元素
- WPF通过鼠标滑轮缩放显示图片
- WPF 自定义鼠标指针图片
- winform 以光标指向点为中心 通过鼠标滚轮对图片进行缩放
- 鼠标为中心缩放控件的底层代码
- WPF拖拽过程中修改鼠标指针属性
- WPF 设置鼠标指针
- [WPF]自定义鼠标指针
- [C#, WPF] 根据鼠标距离窗口中心的距离设置其背景色
- Threejs根据鼠标动态改变controls的target(缩放中心点)
- WPF无边框窗口鼠标拖动缩放大小