2010-06-28 6 views

Respuesta

1

Esencialmente tiene que cargar un archivo XAML y encontrar un control por su nombre:

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

y luego se puede sencillo agregar un controlador de un evento:

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

Puede conseguir la suposición y el uso combinadores de eventos de primera clase - que aquí es una gran introducción paso a paso:

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

2

Acabo de dar una charla sobre programación reactiva en F # (en Londres) que usó Silverlight para implementar la mayoría de los ejemplos. La charla ha sido grabado y las muestras están disponibles para su descarga, así, por lo que este puede ser un recurso útil:

Para responder a su pregunta específica, no creo que puede usar el estilo habitual de especificar controlador de eventos en el archivo XAML (esto puede funcionar en la aplicación F # Silverlight, pero tendría que usar member en lugar de la función let).

Sin embargo, la mejor manera (puedo pensar) para escribir componentes Silverlight es tener solo una biblioteca F # Silverlight y usarla desde una aplicación C# Silverlight. En ese caso, debe escribir el enlace del controlador de eventos en el código. Un ejemplo simplificado (de una de las muestras de la conversación) se vería así:

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!") 
Cuestiones relacionadas