В Expression Blend, когда вы прокручиваете колесо мыши, элементы на экране увеличиваются / уменьшаются, фокусируясь на положении мыши.
Я пытаюсь реализовать идентичный зум в моем собственном проекте, однако у меня возникают проблемы с его перепрыгиванием после масштабирования, перемещением мыши и последующим масштабированием.
Пока что я использую RenderTransform с ScaleTransform, используя координаты мыши в качестве centerX и centerY для ScaleTransform.
Кто-нибудь знает, как они это сделали в 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;
}