Добавьте функцию f # в качестве обработчика событий в xaml - PullRequest
5 голосов
/ 29 июня 2010

Кто-нибудь знает, как добавить обработчик событий F # к элементу управления в файле xaml?

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

Я только что выступил с докладом о реактивном программировании на 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!")
1 голос
/ 29 июня 2010

По сути, вам нужно загрузить файл 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...