Это то, что делает текущая реализация:
В OnMouseWheel
он вызывает следующий метод:
this.ZoomAboutViewportPoint(((double) e.Delta)/100.0, e.GetPosition(this));
Это реализация:
private void ZoomAboutViewportPoint(double zoomLevelIncrement, Point zoomTargetInViewport)
{
base.ZoomAndRotateOrigin = new Point?(zoomTargetInViewport);
base.ViewBeingSetByUserInput = true;
base.SetView((double) (base.TargetZoomLevel + zoomLevelIncrement), base.TargetHeading);
base.ViewBeingSetByUserInput = false;
}
Очевидно, что вы cant set base.ViewBeingSetByUserInput
и base.ZoomAndRotateOrigin
непосредственно, поскольку они являются внутренними.
Вы можете использовать только SetView
соответственно с координатами вида, но все равно потеряете приятную анимационную часть.
В качестве альтернативы вы можете установить вышеупомянутые значения с помощью отражения, но это хрупкий взломать и подвергнуть разрыву, если элемент управления изменяется.
--- UPDATE
Как описано выше: Если подключить к MouseWheel
Event здесь код, чтобы сделать его работу с помощью отражения вызова частного метода:
void BingMap_MouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
System.Reflection.MethodInfo dynMethod = this.BingMap.GetType().GetMethod("ZoomAboutViewportPoint", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
dynMethod.Invoke(this.BingMap, new object[] { (((double)e.Delta)/400d), e.GetPosition(this.BingMap) });
}
Это сводит до четверти скорости и делает его пригодным для использования с наименьшим количеством кода. Но опять же это взломать!
Вы проверили, анимируется ли метод [SetView] (https://msdn.microsoft.com/en-us/library/hh709343.aspx)? – Clemens