Kann jemand einen F # -Ereignishandler zu einem Steuerelement in der XAML-Datei hinzufügen?F # -Funktion als Ereignishandler in XAML hinzufügen
Antwort
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
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 BlogIhre 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!")
- 1. Zugriff auf XAML (WPF) -Elemente in F #
- 2. Wie Ereignishandler programmatisch in WPF hinzufügen wie man in Winform
- 3. Wie Ereignishandler lokale Variable in VB.NET hinzufügen
- 4. Ereignishandler für ListView hinzufügen Items_added
- 5. Fügen Sie mehrere Ereignishandler für ein Ereignis in XAML hinzu?
- 6. Hinzufügen von zusätzlichen Methoden als Typerweiterungen in F #
- 7. Ereignishandler zum Benutzersteuerelement vom benutzerdefinierten Objekt hinzufügen
- 8. F # Funktion Negation Kette
- 9. Formatierung Composite-Funktion in f #
- 10. XAML-Trigger als StaticResource
- 11. Erweiterung ATL, VS2008: Ereignishandler zu WindowEvents hinzufügen
- 12. jQuery: Hinzufügen von Ereignishandler soeben erstellte Element
- 13. Hinzufügen und Entfernen von anonymen Ereignishandler
- 14. Das Hinzufügen neu erstellten Element Ereignishandler
- 15. F # Funktion mit Parametereinschränkungen
- 16. F #: Reduce diese Funktion
- 17. F # - Funktion ohne Argumente?
- 18. F # rekursive Funktion beenden?
- 19. F # Split-Funktion
- 20. F # Curry-Funktion
- 21. Access-Ereignisobjekt in Ereignishandler
- 22. Mein eigenes UIElement-Steuerelement in XAML hinzufügen
- 23. Method einer # Funktion F Retrieve
- 24. Fehlgeschlagen Ereignishandler gesetzt in Javascript
- 25. Wie Rechtsklick Ereignishandler für statischen Text in MFC-Dialog hinzufügen?
- 26. Wie mehrere Bilder als Thumbnails in XAML
- 27. Mehrere Exits Von F # Funktion
- 28. F # Neues Element zu Collections.Map hinzufügen?
- 29. F # Konstruktoren als Funktionen verwenden
- 30. F # Funktion Prägnanz, wenn Zufallszahl