2017-02-27 35 views
2

按照鏈接中的說明How to create draggable pin in windows 10 to give pick location functionality? 我有一個半工作的拖動引腳。在UWP上創建可拖動的地圖引腳

當前的地圖引腳(網格)從地圖上的正確位置開始,但是,在拖動地圖引腳時,引腳最初彈出到屏幕的左上角(0,0)並開始從這裏拖動。 放下銷釘後,它似乎已從地圖元素本身斷開,因爲您可以滾動地圖並將銷釘固定在屏幕上。

我正在使用Xamarin.Forms自定義地圖渲染器。 繼原始示例之後,地圖仍然會隨着引腳拖動一起平移,我通過禁用Grid_ManipuationStarted上的平移來糾正此問題。 該問題似乎與Grid_ManipulationDelta函數有關,因爲這是從MapControl子項中移除Grid的原因。

我已將問題的視頻上傳到YouTube上。這裏找到:https://youtu.be/uUkB5Pi5MnA

我的代碼如下:

void IMapControls.startDraggable(Location l) { 
     // Create the XAML 
     var grid = new Windows.UI.Xaml.Controls.Grid { 
      Height=50, 
      Width=32, 
      Background = new ImageBrush() { ImageSource= new BitmapImage(new Uri("ms-appx:///pin.png",UriKind.RelativeOrAbsolute)),Stretch = Stretch.Uniform }, 
     }; 
     grid.ManipulationMode = ManipulationModes.TranslateX|ManipulationModes.TranslateY; 
     grid.ManipulationCompleted += Grid_ManipulationCompleted; 
     grid.ManipulationStarted += Grid_ManipuationStarted; 
     grid.ManipulationDelta += Grid_ManipulationDelta; 
     // Set RenderTransform so not null later 
     CompositeTransform tran = new CompositeTransform(); 
     grid.RenderTransform = tran; 
     // Add XAML to the map. 
     nativeMap.Children.Add(grid); 
     Geopoint snPoint = new Geopoint(new BasicGeoposition() { Latitude = l.lat,Longitude = l.lng }); 
     MapControl.SetLocation(grid,snPoint); 
     MapControl.SetNormalizedAnchorPoint(grid,new Windows.Foundation.Point(0.5,1.0)); 
    } 

    private void Grid_ManipuationStarted(Object sender,ManipulationStartedRoutedEventArgs e) { 
     nativeMap.PanInteractionMode=MapPanInteractionMode.Disabled; 
    } 

    private void Grid_ManipulationDelta(object sender,ManipulationDeltaRoutedEventArgs e) { 
     var grid = sender as Windows.UI.Xaml.Controls.Grid; 
     CompositeTransform xform = grid.RenderTransform as CompositeTransform; 

     xform.TranslateX += e.Delta.Translation.X; 
     xform.TranslateY += e.Delta.Translation.Y; 

     e.Handled = true; 
    } 

    private void Grid_ManipulationCompleted(object sender,ManipulationCompletedRoutedEventArgs e) { 
     nativeMap.PanInteractionMode=MapPanInteractionMode.Auto; 
     var grid = sender as Windows.UI.Xaml.Controls.Grid; 
     Rect point = grid.TransformToVisual(nativeMap).TransformBounds(new Rect(0,0,grid.Width,grid.Height)); 
     Geopoint gPoint; 
     nativeMap.GetLocationFromOffset(new Windows.Foundation.Point(point.X,point.Y),out gPoint); 
     Debug.WriteLine(gPoint.Position.Latitude); 
     Debug.WriteLine(gPoint.Position.Longitude); 
    } 
+0

根據您的視頻,您可以在點擊圖釘或地圖時初始化圖釘位置。檢查這些監聽器。 –

+0

感謝您的回覆。我實際上通過使用網格和圖像來解決它。以下解決方案 –

回答

0

通過創建一個網格並將其添加到地圖,然後創建圖像和添加這對網格解決這一點。如上所述,使用Delta.Translation拖動圖像,並在放下引腳時使用MapControl.SetLocation(Not TranslateX/Y)將引腳移動到引腳下降的位置,然後TranslateX/Y引腳圖像爲0,0(相對於父網格)。 這工作,因爲網格只能使用SetLocation,似乎工作正常,並不像以前那樣斷開它與地圖的連接。引腳相對於電網移動並且沒有像以前那樣的問題,即,在開始和從地圖對象斷開連接時移至0,0。

乾杯!

如果有人有興趣,可以發佈代碼,但我認爲這是相當自我解釋。