如何在 F# 中使用 Xamarin.Forms.Maps 创建自定义事件?

问题描述

如何在 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); }
        }

    }

根据“Microsoft's document”,我尝试转换成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
            

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)