2010-06-28 1 views

ответ

1

По сути вы должны загрузить файл XAML и найти элемент управления по имени:

let w = Application.LoadComponent(new System.Uri(
      "/twitterstream;component/Window.xaml", System.UriKind.Relative 
     )) :?> Window 
let b = w.FindName("buttonToggle") :?> Button 

, а затем вы можете просто добавить обработчик события:

b.Click.Add(fun _ -> ...) 

Вы можете получить фантазии и использовать комбинаторы событий первого класса - вот это большой шаг за шагом введение:

http://blogs.msdn.com/b/timng/archive/2010/05/06/f-wpf-events.aspx

2

Я только что рассказал о реактивном программировании в F # (в Лондоне), который использовал Silverlight для реализации большинства примеров. Разговор был записан и образцы доступны для загрузки, так что это может быть полезным ресурсом:

Чтобы ответить на конкретный вопрос, я не думаю, что вы можете использовать обычный стиль указания обработчика событий в файле XAML (это может работать в приложении F # Silverlight, но вам нужно будет использовать member вместо функции let).

Однако, лучший способ (я могу придумать) для написания компонентов Silverlight - иметь только библиотеку Silverlight F # и использовать ее из приложения 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!") 
Смежные вопросы