【发布时间】:2012-02-12 09:49:59
【问题描述】:
在 Expression Blend 中,当您滚动鼠标滚轮时,屏幕上的元素会放大/缩小,并聚焦在鼠标所在的位置。
我正在尝试在我自己的项目中实现相同的缩放,但是在缩放、移动鼠标然后再次缩放后它会跳来跳去。
到目前为止,我正在使用带有 ScaleTransform 的 RenderTransform,使用鼠标坐标作为 ScaleTransform 的 centerX 和 centerY。
有人知道他们是如何在 Expression Blend 中做到的吗?
这是我到目前为止所做的:
private void ScrollCanvasMouseWheel(object sender, MouseWheelEventArgs e)
{
double zoomAmnt = e.Delta > 0 ? 0.2 : -0.2;
_scaleTransformAmount += zoomAmnt;
if (_scaleTransformAmount < 0.5)
_scaleTransformAmount = 0.5;
Point position = e.GetPosition(ScrollCanvas);
var scaleTransform = ScrollCanvas.RenderTransform as ScaleTransform;
if (scaleTransform == null) throw new ArgumentNullException("scaleTransform");
scaleTransform.ScaleX = _scaleTransformAmount;
scaleTransform.ScaleY = _scaleTransformAmount;
scaleTransform.CenterX = position.X;
scaleTransform.CenterY = position.Y;
}
【问题讨论】:
标签: c# wpf zooming transform scale