wpf - 如何在 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
解决方案
通常,在 F#(没有库)中创建用户控件通常与在 C# 中完全不同。
主要问题是您不能使用部分类,因此设计器将无法运行。即使您放弃设计器,使用 XAML 文件的典型工作流也无法正常工作。要在“纯”F# 中执行此操作,您通常需要在代码中编写 UI,而不是在 XAML 中编写 UI,并允许生成的InitializeComponent()
方法将事物连接在一起。
但是,以更“自然”的方法到达那里的一种方法是使用FsXaml。它允许您直接编写用户控件,这些控件以类似于 C# 开发的方式可用。这是通过类型提供程序并覆盖默认信息来完成的。