如何在 F# 中编写 WPF 用户控件?

How to write a WPF user control in F#?

可以用 F# 编写 WPF 用户控件吗?

假设我有一个标准的 WPF/C# 用户控件:

public class DataGridAnnotationControl : UserControl
    {
        static DataGridAnnotationControl()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(DataGridAnnotationControl), new FrameworkPropertyMetadata(typeof(DataGridAnnotationControl)));
        }
        
        public DataGridAnnotationControl()
        {
            BorderBrush = Brushes.Black;
            Background = Brushes.AliceBlue;
            BorderThickness = new Thickness(20, 20, 20, 20);
        }
        
        public string LastName
        {
            get { return (string)GetValue(LastNameProperty); }
            set { SetValue(LastNameProperty, value); }
        }
        
        public static readonly DependencyProperty LastNameProperty =
            DependencyProperty.Register("LastName", typeof(string), typeof(DataGridAnnotationControl), new PropertyMetadata(string.Empty));
        
}

这在 F# 中是如何编码的?

TIA

一般来说,在 F# 中创建用户控件(没有库)通常与在 C# 中创建完全不同。

主要问题是您不能使用部分 类,因此设计器将无法运行。即使您放弃设计器,具有 XAML 个文件的典型工作流程也无法正常工作。要在“纯”F# 中执行此操作,您通常需要在代码中编写 UI 而不是在 XAML 中编写并允许生成的 InitializeComponent() 方法将它们连接在一起。

但是,一种更“自然”的方法是使用 FsXaml. It allows you to write user controls directly which become usable in a similar way to C# developed ones. This is done via a type provider and overriding the default information