Мне удалось перетащить канцелярскую кнопку, добавив обработчик событий для 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) );
}
Это предотвратит панорамирование карты во время перетаскивания канцелярской кнопки.