Как я могу управлять ManipulationDelta в картографическом приложении?

Я пытаюсь создать приложение карт, такое как Карты WP7. Я знаю, что в WPF просто управлять жестами холста карты с помощью MatrixTransform, но версия MatrixTransform для WP7 менее функциональна. Есть ли шаблоны, как управлять всеми событиями ManipulationDelta, чтобы:

  • Увеличение и уменьшение масштаба. Сейчас делаю так:

    var maxScale = Math.Max(
        args.DeltaManipulation.Scale.X,
        args.DeltaManipulation.Scale.Y);
    
    if (Math.Abs(maxScale - 0) > 0.0001 &&
        ((maxScale < 1 && _scale.ScaleX > MIN_SCALE) ||
         (maxScale > 1 && _scale.ScaleX < MAX_SCALE)))
    {
        _scale.ScaleX *= maxScale;
        _scale.ScaleY *= maxScale;
    }
    

где _scale = новый ScaleTransform(); и его нужно улучшить, чтобы управлять положением холста

  • Перемещение карты пальцем. На первом этапе это выглядит так:

    _translation.X += args.DeltaManipulation.Translation.X
        * _scale.ScaleX;
    
    _translation.Y += args.DeltaManipulation.Translation.Y
        * _scale.ScaleX;
    

где _translation = новый TranslateTransform();

  • Сделайте немного динамики после Pan, Pinch and Stretch

текущей реализации нет, но я просматриваю ManipulationCompleted, где добавить некоторый код для «продолжения» жестов более естественным образом.

Я ищу типичное решение для управления этими функциями, может быть, я ошибаюсь, а не через ManipulationDelta.


person Vitaly Baum    schedule 03.03.2012    source источник
comment
Почему бы просто не использовать MapControl, который поставляется с фреймворком?   -  person Matt Lacey    schedule 04.03.2012


Ответы (1)


После небольшого исследования я решил использовать это поведение, чтобы добавить мультитач http://gallery.expression.microsoft.com/MultiTouch/

Если что-то пойдет не так, я могу просто посмотреть на отраженный код и создать что-то подобное

person Vitaly Baum    schedule 06.03.2012