【问题标题】:How to display a pin on maps如何在地图上显示图钉
【发布时间】:2019-04-16 12:28:10
【问题描述】:

我可以在我的 App 界面上显示地图,现在我正在尝试显示我当前位置的 Pin 图。 我显示在但有一个按钮 Click 向我显示另一个 Content Page 。但即使单击该按钮后,我也无法在同一页面上显示它。 如果有办法显示它,在同一页面上且无需单击任何按钮,我将非常感谢。

这是我的 Clicked_Button 事件的代码,此代码有效,当我单击它时,会显示一个带有我当前位置的新内容页面。但我希望它在主页的地图模块中显示它, 这是我的地图的 XAML 代码(将其放在网格中):

<maps1:Map  Grid.Column="1" 
Grid.Row="2" 
Grid.RowSpan="2" 
Grid.ColumnSpan="3"
x:Name="myMap">

我试图从我的后端代码中删除“Content = myMap;”以将其保留在主页上,但图钉没有显示出来。

protected async void OnButtonClicked_speed(object sender, EventArgs args)
{
    var locator = CrossGeolocator.Current;
    locator.DesiredAccuracy = 50;
    var position = await locator.GetPositionAsync(TimeSpan.FromSeconds(10));

    myMap = new Xamarin.Forms.Maps.Map(MapSpan.FromCenterAndRadius(
    new Xamarin.Forms.Maps.Position(position.Latitude,position.Longitude),
    Distance.FromMiles(0.5)))
    {
        IsShowingUser = true,
        VerticalOptions = LayoutOptions.FillAndExpand
    };

    var position1 = new Xamarin.Forms.Maps.Position(position.Latitude, position.Longitude);

    var pin1 = new Pin
    {
        Type = PinType.Place,
        Position = position1,
        Label = "Current Position",
        Address = ""
    };

    myMap.Pins.Add(pin1);
    Content = myMap;
}

【问题讨论】:

    标签: c# xamarin xamarin.forms maps


    【解决方案1】:

    内容 = 我的地图

    这相当于用地图重新填充当前页面

    所以您只需将代码移出您的 OnButtonClicked_speed 方法即可。

    像这样:

    MainPage.xaml.cs

    public partial class MainPage : ContentPage
    {
        private Map myMap;
        public MainPage(Position position)
        {
            InitializeComponent();           
            myMap.MoveToRegion(MapSpan.FromCenterAndRadius(
                new Xamarin.Forms.Maps.Position(position.Latitude, position.Longitude),
                Distance.FromMiles(0.5)));
            myMap.IsShowingUser = true;
            myMap.VerticalOptions = LayoutOptions.FillAndExpand;
            var position1 = new Xamarin.Forms.Maps.Position(position.Latitude, position.Longitude);
    
            var pin1 = new Pin
            {
                Type = PinType.Place,
                Position = position1,
                Label = "Current Position",
                Address = ""
            };
    
            myMap.Pins.Add(pin1);
        }
    
      public static async Task<MainPage> CreateMainPageAsync()
        {
    
            var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 50;
            var position = await locator.GetPositionAsync(TimeSpan.FromSeconds(10));
            MainPage page = new MainPage(position );
            return page;
        }
    }
    

    App.xaml.cs

    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();
        }
    
        protected override async void OnStart()
        {
            namespace.MainPage main = await namespace.MainPage.CreateMainPageAsync();
            MainPage = main;
        }
    }
    

    【讨论】:

    • 我不能这样做,因为我有一个“等待”
    • 我尝试将其放入 Async Method 并在 Constructor 中调用它,但它不起作用
    • 很抱歉我没有注意到 await
    • 非常感谢,我会等待您的建议
    • @KhalidHarkati 您可以像上面那样更改并尝试一下,如果您有任何问题,请联系我
    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多