перетаскиваемая канцелярская кнопка windows phone 7 bing maps control - PullRequest
6 голосов
/ 15 марта 2011

Просто интересно, есть ли приличные ресурсы о том, как запрограммировать перетаскиваемый значок для карты в приложении Windows Phone 7.Я хорошо выглядел и могу найти информацию только о том, как это сделать для приложения браузера.

В идеале я хочу, чтобы пользователь мог щелкнуть по кнопке и перетащить ее в какое-либо место на картеоднако в данный момент я могу думать только о том, чтобы пользователь перетаскивал карту, а кнопка остается в центре карты.

Ответы [ 3 ]

6 голосов
/ 15 марта 2011

Я еще не видел, чтобы это было сделано в приложении WP7 - но вот описание для Silverlight 3 - http://pietschsoft.com/post/2010/05/30/Draggable-Pushpins-using-Bing-Maps-Silverlight-Control.aspx

При реализации этого, я предполагаю, что вам нужно быть осторожным с тем, куда вы действительно перетаскиваете значок по отношению к вашему пальцу - например, если вы посмотрите, как текстовая каретка перемещается в текстовом блоке при нажатии / удержании / перетаскивании, то вы увидите, что позиция каретки смещена над пальцем, поэтому вы всегда можете ее увидеть.

4 голосов
/ 15 марта 2011

Да, вы можете.Вот хорошее описание того, как реализовать это поведение.

Dragable PushPins

2 голосов
/ 24 февраля 2012

Мне удалось перетащить канцелярскую кнопку, добавив обработчик событий для MouseMove и обновив канцелярскую кнопку в соответствии с расположением мыши.

<my:Pushpin x:Name="pushpin" MouseLeftButtonDown="pushpin_MouseLeftButtonDown" MouseLeftButtonUp="pushpin_MouseLeftButtonUp" MouseMove="pushpin_MouseMove"/>

Но проблема в том, что элемент управления картой будет панорамировать одновременно с перетаскиванием канцелярской кнопки.Чтобы решить эту проблему, мне нужно было добавить обработчик событий для мыши вверх и вниз к кнопке и один для MapPan для элемента управления картой.

        private void mapControl_MapPan( object sender, MapDragEventArgs e )
        {
          if( isDragging )
          {
            e.Handled = true;
          }
        }

        private void pushpin_MouseLeftButtonDown( object sender, MouseButtonEventArgs e )
        {
          pushpin.CaptureMouse( );
          isDragging = true;
        }

        private void pushpin_MouseLeftButtonUp( object sender, MouseButtonEventArgs e )
        {
          pushpin.ReleaseMouseCapture( );
          isDragging = false;
        }

        private void pushpin_MouseMove( object sender, MouseEventArgs e )
        {
          pushpin.Location = mapControl.ViewportPointToLocation( e.GetPosition( mapControl) );
        }

Это предотвратит панорамирование карты во время перетаскивания канцелярской кнопки.

...