2010-06-28 24 views

Trả lời

1

Về cơ bản bạn cần phải tải một file XAML và tìm một điều khiển theo tên:

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

và sau đó bạn có thể đơn giản thêm một handler một sự kiện:

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

Bạn có thể nhận được ưa thích và sử dụng tổ hợp sự kiện hạng nhất - dưới đây là giới thiệu từng bước tuyệt vời:

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

2

Tôi vừa nói chuyện về lập trình phản ứng trong F # (ở London) đã sử dụng Silverlight để thực hiện hầu hết các ví dụ. Buổi nói chuyện đã được ghi nhận và các mẫu có sẵn để tải về là tốt, vì vậy đây có thể là một nguồn tài nguyên hữu ích:

Để trả lời câu hỏi cụ thể của bạn, tôi không nghĩ rằng bạn có thể sử dụng kiểu thông thường để chỉ định trình xử lý sự kiện trong tệp XAML (điều này có thể làm việc trong Ứng dụng Silverlight F #, nhưng bạn sẽ phải sử dụng member thay vì chức năng let).

Tuy nhiên, cách tốt nhất (tôi có thể nghĩ ra) để viết các thành phần Silverlight là chỉ có Thư viện Silverlight F # và sử dụng nó từ ứng dụng C# Silverlight. Trong trường hợp đó, bạn cần phải viết ràng buộc xử lý sự kiện trong mã. Ví dụ đơn giản (từ một trong các mẫu từ cuộc nói chuyện) sẽ trông giống như sau:

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!") 
Các vấn đề liên quan