按照鏈接中的說明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);
}
根據您的視頻,您可以在點擊圖釘或地圖時初始化圖釘位置。檢查這些監聽器。 –
感謝您的回覆。我實際上通過使用網格和圖像來解決它。以下解決方案 –