0

如何在 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
            
4

0 回答 0