Полагаю, вопрос в том, можете ли вы указать член F # в качестве обработчика событий, используя разметку XAML:
<Button x:Name="btnClick" Content="Click!" Click="button1_Click" />
Насколько я знаю, ответ: Нет .
Способ, которым это работает в C #, заключается в том, что регистрация обработчика событий выполняется в коде C # (частичный класс), сгенерированном дизайнером (вы можете видеть это в каталоге obj
в файлах с именем, например, MainForm.g.cs
).F # не имеет прямой поддержки дизайнера WPF, поэтому он не может сгенерировать это для вас.Вам нужно будет написать код, чтобы прикрепить обработчики событий вручную (но это довольно просто).
У меня есть несколько примеров в моем лондонском выступлении о Silverlight .Вы можете реализовать оператор ?
, чтобы получить хороший доступ к элементам XAML:
type MainPage() as this =
inherit UserControl()
let uri = new System.Uri("/App;component/MainPage.xaml", UriKind.Relative)
do Application.LoadComponent(this, uri)
// Get button using dynamic access and register handler
let btn : Button = this?btnClick
do btnClick.Click.Add(fun _ -> (* ... *))
Объявление оператора ?
, которое я использовал:
let (?) (this : Control) (prop : string) : 'T = // '
this.FindName(prop) :?> 'T