如何在 F# 中使用 Xamarin.Forms.Maps 创建自定义事件?我在 C# 中做了一个版本,但尝试转换为 F# 失败。请随时评论如何转换为 F#。谢谢你。
C# 中的版本
public class MyMap : Map
{
public static readonly BindableProperty ZoomLevelProperty = BindableProperty.Create(nameof(ZoomLevel), typeof(Distance), typeof(MainPageMap), new Distance());
public MyMap()
{
this.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
{
MyMap map = sender as MyMap;
if (map.VisibleRegion != null)
{
this.ZoomLevel = map.VisibleRegion.Radius;
// Console.WriteLine("Xamarin Forms Map Radius: {0} Kilometers | {1} Meters | {2} Miles.", ZoomLevel.Kilometers, ZoomLevel.Meters, ZoomLevel.Miles);
}
};
}
public Distance ZoomLevel
{
get { return (Distance)GetValue(ZoomLevelProperty); }
set { SetValue(ZoomLevelProperty, value); }
}
}
根据“微软的文档”,我尝试转换成F#。
namespace ProjectA.Controls
open System
open System.ComponentModel
open Xamarin.Forms
open Xamarin.Forms.Maps
type MyMap() =
inherit Map()
static let ZoomLevelProperty = BindableProperty.Create("ZoomLevel", typeof<Distance>, typeof<MyMap>, new Distance())
member this.ZoomLevel
with get () = this.GetValue ZoomLevelProperty :?> Distance
and set (value: Distance) = this.SetValue(ZoomLevelProperty, value)
member this.PropertyChanged(sender: Object, e: PropertyChangedEventArgs) =
let map:MyMap = sender :?> MyMap
if (map.VisibleRegion <> null) then this.ZoomLevel <- map.VisibleRegion.Radius