【问题标题】:xamarin forms map's marker click eventxamarin 形成地图的标记点击事件
【发布时间】:2020-04-11 08:12:34
【问题描述】:

我有一张地图,上面有一个别针。如下:

var map = new Map()
                {
                    IsShowingUser = true,
                    HeightRequest = 100,
                    WidthRequest = 960,
                    VerticalOptions = LayoutOptions.FillAndExpand
                };

以及引脚位置和标签如下:

var pin1 = new Pin();
pin1.Type = PinType.Place;
pin1.Position = position;
pin1.Label = "Ticket Number: " + Cache.Instance.Ticket.TicketNumber;

点击事件:

pin1.Clicked += delegate
{
    uri = new Uri("http://maps.google.com/maps?daddr=" + position.Latitude + "," + position.Longitude);
    Device.OpenUri(uri);
}

地图加载:

var stack = new StackLayout { Spacing = 00 };
        stack.Children.Add(map); 
        Content = stack;

单击图钉标记时,它会打开一个信息窗口并单击该窗口并单击事件代码触发器。有什么方法可以不显示信息窗口,并且在我单击标记后立即触发事件?

谢谢

【问题讨论】:

  • 这是诀窍吗? :void Map_PinClicked(object sender, PinClickedEventArgs e) { e.Handled = true; }

标签: google-maps xamarin.forms google-maps-markers


【解决方案1】:

使用Map_PinClicked 处理PinClick 事件,如果设置e.Handled = true,则引脚选择不会自动工作。所有引脚选择操作都委托给您。

在页面中:

    map.PinClicked += Map_PinClicked;

    // Selected Pin changed
    map.SelectedPinChanged += SelectedPin_Changed;

    map.InfoWindowClicked += InfoWindow_Clicked;

    map.InfoWindowLongClicked += InfoWindow_LongClicked;

然后点击事件:

    void Map_PinClicked(object sender, PinClickedEventArgs e)
    {
        e.Handled = true;

        uri = new Uri("http://maps.google.com/maps?daddr=" + position.Latitude + "," + position.Longitude);
        Device.OpenUri(uri);

    }

您可以查看here 了解更多信息。

【讨论】:

    【解决方案2】:

    目前在 Xamarin.Forms 5 中,PinClicked 事件被指定为已过时。 Device.OpenUri 也是如此。 可以改用pin1.MarkerClicked += Pin_Clicked;。 您可以通过将 EventArgs 的 HideInfoWindow 属性设置为 true 来阻止信息窗口打开。 docs.microsoft

     private async void Pin_Clicked(object sender, PinClickedEventArgs e)
     {
            try
            {
                e.HideInfoWindow = true;
                var pin = sender as Pin;
                var uri = new Uri("http://maps.google.com/maps?daddr=" + pin.Position.Latitude + "," + pin.Position.Longitude);
                Launcher.OpenAsync(uri);
            }
            catch (Exception ex)
            {
               //log error
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 2015-11-24
      • 2014-12-04
      • 2011-09-01
      • 2017-04-27
      • 1970-01-01
      相关资源
      最近更新 更多