2010-06-28 3 views

Répondre

1

Essentiellement, vous devez charger un fichier XAML et trouver un contrôle par nom:

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

et vous pouvez simplement ajouter un gestionnaire d'un événement:

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

Vous pouvez obtenir la fantaisie et de l'utilisation événement de première classe combinators - ici est une excellente introduction étape par étape:

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

2

Je viens de parler de la programmation réactive en F # (à Londres) qui a utilisé Silverlight pour implémenter la plupart des exemples. La conversation a été enregistrée et les échantillons sont disponibles pour téléchargement et, si cela peut être une ressource utile:

Pour répondre à votre question, je ne pense pas que vous pouvez utiliser le style habituel de spécification du gestionnaire d'événements dans le fichier XAML (cela peut fonctionner dans F # Silverlight Application, mais vous devrez utiliser member au lieu de la fonction let). Cependant, la meilleure façon (je pense) d'écrire des composants Silverlight est de n'avoir qu'une bibliothèque F # Silverlight et d'utiliser celle d'une application Silverlight C#. Dans ce cas, vous devez écrire la liaison du gestionnaire d'événements dans le code. Un exemple simplifié (tiré de l'un des exemples de la conversation) ressemblerait à ceci:

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!") 
Questions connexes