首页 > 解决方案 > 如何在 F# 中编写 WPF 用户控件?

问题描述

可以用 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

标签: wpff#user-controls

解决方案


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

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

但是,以更“自然”的方法到达那里的一种方法是使用FsXaml。它允许您直接编写用户控件,这些控件以类似于 C# 开发的方式可用。这是通过类型提供程序并覆盖默认信息来完成的。


推荐阅读