Мне удалось реализовать масштабирование масштабирования и панорамирование, подключившись к событиям ManipulationDelta и ManipulationStarted (в элементе управления изображением):
private void image_OnManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
var transform = (CompositeTransform)image.RenderTransform;
// pan
transform.TranslateX = _translationX + e.CumulativeManipulation.Translation.X;
transform.TranslateY = _translationY + e.CumulativeManipulation.Translation.Y;
// zoom
if (e.PinchManipulation != null)
{
transform.CenterX = e.PinchManipulation.Original.Center.X;
transform.CenterY = e.PinchManipulation.Original.Center.Y;
transform.ScaleX = _scaleX * e.PinchManipulation.CumulativeScale;
transform.ScaleY = _scaleY * e.PinchManipulation.CumulativeScale;
}
}
private void image_OnManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
// the user has started manipulating the screen, set starting points
var transform = (CompositeTransform)image.RenderTransform;
_scaleX = transform.ScaleX;
_scaleY = transform.ScaleY;
_translationX = transform.TranslateX;
_translationY = transform.TranslateY;
}
Но по сравнению с гладкостью остальной части пользовательского интерфейса Windows он чувствует себя очень спокойным и жестким. В движении нет инерции.
Есть ли способ сделать движения более плавными? Использует ли анимации и раскадровки способ сделать это? Я пробовал использовать ScrollView для получения хотя бы плавного панорамирования, но тогда события ManipulationDelta не срабатывают правильно.