Я только что выступил с докладом о реактивном программировании на F # (в Лондоне), которое использовало Silverlight для реализации большинства примеров. Доклад был записан, и образцы также доступны для скачивания, так что это может быть полезным ресурсом:
Чтобы ответить на ваш конкретный вопрос, я не думаю, что вы можете использовать обычный стиль указания обработчика событий в файле XAML (это может работать в приложении F # Silverlight, но вам придется использовать member
вместо let
функция).
Однако лучший способ (на мой взгляд) для написания компонентов Silverlight - это просто иметь библиотеку F # Silverlight и использовать ее из приложения C # Silverlight. В этом случае вам нужно написать привязку обработчика события в коде. Упрощенный пример (из одного из примеров из доклада) будет выглядеть так:
open System.Windows.Controls
// Dynamic invoke operator that makes accessing XAML elements easy
// (easier than using 'FindName' explicitly in the code
let (?) (this : Control) (prop : string) : 'T = // '
this.FindName(prop) :?> 'T // '
type MyControl() as this =
inherit UserControl()
do
let path = "/MyProject;component/MyControl.xaml"
let uri = new System.Uri(path, UriKind.Relative)
Application.LoadComponent(this, uri)
// Get Button named 'TestButton' from the XAML file
let btn : Button = this?TestButton
// Add event handler to the button
btn.Add(fun _ -> btn.Text <- "Clicked!")