2010-06-28 14 views

Antwort

1

Im Wesentlichen müssen Sie eine XAML-Datei laden und eine Kontrolle über ihren Namen gesucht:

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

und dann einen Handler ein Ereignis einfach hinzufügen können:

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

Sie Lust bekommen und Verwendung Ereignis combinators erstklassige - hier ist ein großer Schritt-für-Schritt-Einführung:

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

2

Ich habe gerade einen Vortrag über reaktive Programmierung in F # (in London) gehalten, in dem Silverlight zur Implementierung der meisten Beispiele verwendet wurde. Der Vortrag wird gespeichert und die Proben sind auch zum Download zur Verfügung, so dass dies eine nützliche Ressource sein kann:

mein Blog

Ihre Frage zu beantworten, ich glaube nicht, dass Sie den üblichen Stil zum Festlegen des Ereignishandlers in der XAML-Datei verwenden können (dies funktioniert möglicherweise in F # Silverlight Application, aber Sie müssten member anstelle von let Funktion verwenden).

Allerdings ist der beste Weg (ich kann daran denken) zum Schreiben von Silverlight-Komponenten, nur eine F # Silverlight Library zu haben und diese aus einer C# -Silverlight-Anwendung zu verwenden. In diesem Fall müssen Sie die Event-Handler-Bindung in Code schreiben. Ein vereinfachtes Beispiel (von einem der Beispiele aus dem Vortrag) würde so aussehen:

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!") 
Verwandte Themen