如何在Windows 10中创建可拖动的引脚以提供选择位置function?

我正在使用Windows 10中的MapControl,我希望允许用户拖动引脚,当用户放下引脚时想要获取该位置的经度和经度,并使用API​​获取位置地址。我使用以下添加了Map Icon码

MapControl map = frameworkElement as MapControl; map.MapServiceToken= "my service token"; BasicGeoposition councilPosition = new BasicGeoposition() { Latitude = Convert.ToDouble(Info.GetType().GetRuntimeProperty("LATITUDE").GetValue(councilInfo, null)), Longitude = Convert.ToDouble(Info.GetType().GetRuntimeProperty("LONGITUDE").GetValue(councilInfo, null)) }; Geopoint pinPoint = new Geopoint(councilPosition); MapIcon locationPin = new MapIcon(); locationPin.Image= RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Images/pushpin.png")); locationPin.Title = councilInfo.COUNCIL_NAME; locationPin.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible; locationPin.Location = councilPoint; locationPin.NormalizedAnchorPoint = new Point(0.5, 1.0); locationPin.ZIndex = 0; map.MapElements.Add(locationPin); await map.TrySetViewAsync(locationPin.Location, 15D, 0, 0, MapAnimationKind.Bow); 

有人可以建议需要使用哪些事件来实现选择位置function吗?

请参阅此链接 。 他们使用XAML指定了显示点。 您可以使用带有背景图钉图像的网格而不是边框​​,监听该网格的操纵事件。

这是实现我上面所说的代码。

  private void MainPage_Loaded(object sender, RoutedEventArgs e) { BasicGeoposition snPosition = new BasicGeoposition() { Latitude = 47.7356039173901, Longitude = -122.310697222129 }; Geopoint snPoint = new Geopoint(snPosition); // Create a XAML border. Grid grid = new Grid { Width=100, Height=100, Background = new ImageBrush() {ImageSource= new BitmapImage(new Uri("ms-appx:///Assets/icon.png", UriKind.RelativeOrAbsolute)), Stretch = Stretch.UniformToFill} }; grid.ManipulationMode = ManipulationModes.TranslateX|ManipulationModes.TranslateY; grid.ManipulationCompleted += Grid_ManipulationCompleted; grid.ManipulationDelta +=Grid_ManipulationDelta; // Center the map over the POI. MapControl1.Center = snPoint; MapControl1.ZoomLevel = 14; CompositeTransform tran = new CompositeTransform(); grid.RenderTransform = tran; // Add XAML to the map. MapControl1.Children.Add(grid); MapControl.SetLocation(grid, snPoint); MapControl.SetNormalizedAnchorPoint(grid, new Point(0.5, 0.5)); } private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { Grid grid = sender as Grid; CompositeTransform xform = grid.RenderTransform as CompositeTransform; xform.TranslateX += e.Delta.Translation.X; xform.TranslateY += e.Delta.Translation.Y; // Rect point = grid.TransformToVisual(MapControl1).TransformBounds(new Rect(0,0, grid.Width, grid.Height)); e.Handled = true; // Geopoint gPoint; // MapControl1.GetLocationFromOffset(new Point(point.X, point.Y), out gPoint); // Debug.WriteLine(gPoint.Position.Latitude); // Debug.WriteLine(gPoint.Position.Longitude); } private void Grid_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) { Grid grid = sender as Grid; Rect point = grid.TransformToVisual(MapControl1).TransformBounds(new Rect(0, 0, grid.Width, grid.Height); Geopoint gPoint; MapControl1.GetLocationFromOffset(new Point(point.X, point.Y), out gPoint); Debug.WriteLine(gPoint.Position.Latitude); Debug.WriteLine(gPoint.Position.Longitude); } 

拖动后获取的位置不准确。 您可以对如何获取Mapatrol的准确点wrt进行一些研发