| File: Pin.cs | Web Access |
| Project: src\src\Controls\Maps\src\Controls.Maps.csproj (Microsoft.Maui.Controls.Maps) |
using System; using System.ComponentModel; using Microsoft.Maui.Devices.Sensors; using Microsoft.Maui.Maps; namespace Microsoft.Maui.Controls.Maps { /// <summary> /// Represents a pin on the <see cref="Map"/> control. /// </summary> public partial class Pin : Element { /// <summary>Bindable property for <see cref="Type"/>.</summary> public static readonly BindableProperty TypeProperty = BindableProperty.Create(nameof(Type), typeof(PinType), typeof(Pin), default(PinType)); /// <summary>Bindable property for <see cref="Location"/>.</summary> public static readonly BindableProperty LocationProperty = BindableProperty.Create(nameof(Location), typeof(Location), typeof(Pin), default(Location)); /// <summary>Bindable property for <see cref="Address"/>.</summary> public static readonly BindableProperty AddressProperty = BindableProperty.Create(nameof(Address), typeof(string), typeof(Pin), default(string)); /// <summary>Bindable property for <see cref="Label"/>.</summary> public static readonly BindableProperty LabelProperty = BindableProperty.Create(nameof(Label), typeof(string), typeof(Pin), default(string)); private object? _markerId; /// <inheritdoc /> public string Address { get { return (string)GetValue(AddressProperty); } set { SetValue(AddressProperty, value); } } /// <inheritdoc /> public string Label { get { return (string)GetValue(LabelProperty); } set { SetValue(LabelProperty, value); } } /// <inheritdoc /> public Location Location { get { return (Location)GetValue(LocationProperty); } set { SetValue(LocationProperty, value); } } /// <summary> /// Gets or sets the kind of pin. The default value is <see cref="PinType.Generic"/>. /// This is a bindable property. /// </summary> /// <remarks>Depending on the platform, and versions of the platform, this might change the visual representation. This varies between the different platforms.</remarks> public PinType Type { get { return (PinType)GetValue(TypeProperty); } set { SetValue(TypeProperty, value); } } /// <summary> /// Gets or sets the platform counterpart of this pin element. /// </summary> /// <remarks>This should typically not be set by the developer. Doing so might result in unpredictable behavior.</remarks> public object? MarkerId { get => _markerId; set { _markerId = value; } } /// <summary> /// Raised when this marker is clicked. /// </summary> public event EventHandler<PinClickedEventArgs>? MarkerClicked; /// <summary> /// Raised when the info window for this marker is clicked. /// </summary> public event EventHandler<PinClickedEventArgs>? InfoWindowClicked; /// <inheritdoc cref="object.Equals(object)"/> public override bool Equals(object? obj) { if (obj is null) { return false; } if (ReferenceEquals(this, obj)) { return true; } if (obj.GetType() != GetType()) { return false; } return Equals((Pin)obj); } /// <inheritdoc cref="object.GetHashCode"/> public override int GetHashCode() { unchecked { #if NETSTANDARD2_0 int hashCode = Label?.GetHashCode() ?? 0; hashCode = (hashCode * 397) ^ Location.GetHashCode(); hashCode = (hashCode * 397) ^ (int)Type; hashCode = (hashCode * 397) ^ (Address?.GetHashCode() ?? 0); #else int hashCode = Label?.GetHashCode(StringComparison.Ordinal) ?? 0; hashCode = (hashCode * 397) ^ Location.GetHashCode(); hashCode = (hashCode * 397) ^ (int)Type; hashCode = (hashCode * 397) ^ (Address?.GetHashCode(StringComparison.Ordinal) ?? 0); #endif return hashCode; } } /// <summary> /// Equality operator for equals. /// </summary> /// <param name="left">Left to compare.</param> /// <param name="right">Right to compare.</param> /// <returns><see langword="true"/> if objects are equal, otherwise <see langword="false"/>.</returns> public static bool operator ==(Pin? left, Pin? right) { return Equals(left, right); } /// <summary> /// Inequality operator. /// </summary> /// <param name="left">Left to compare.</param> /// <param name="right">Right to compare.</param> /// <returns><see langword="true"/> if objects are not equal, otherwise <see langword="false"/>.</returns> public static bool operator !=(Pin? left, Pin? right) { return !Equals(left, right); } /// <summary> /// Triggers the click/tap event for a pin. /// </summary> /// <returns><see langword="true"/> if the info window associated to this pin will hide after this event has occurred, otherwise <see langword="false"/></returns> /// <remarks>For internal use only. This API can be changed or removed without notice at any time.</remarks> [EditorBrowsable(EditorBrowsableState.Never)] public bool SendMarkerClick() { var args = new PinClickedEventArgs(); MarkerClicked?.Invoke(this, args); return args.HideInfoWindow; } /// <summary> /// Triggers the click/tap event for a info window of a pin. /// </summary> /// <returns><see langword="true"/> if the info window associated to this pin will hide after this event has occurred, otherwise <see langword="false"/></returns> /// <remarks>For internal use only. This API can be changed or removed without notice at any time.</remarks> [EditorBrowsable(EditorBrowsableState.Never)] public bool SendInfoWindowClick() { var args = new PinClickedEventArgs(); InfoWindowClicked?.Invoke(this, args); return args.HideInfoWindow; } bool Equals(Pin other) { return string.Equals(Label, other.Label, StringComparison.Ordinal) && Equals(Location, other.Location) && Type == other.Type && string.Equals(Address, other.Address, StringComparison.Ordinal); } } }