silverlight - 在 xaml 中添加 f# 函数作为事件处理程序

标签 silverlight events xaml f#

有谁知道如何将 F# 事件处理程序添加到 xaml 文件中的控件?

最佳答案

我刚刚在 F# 中(在伦敦)进行了一次关于使用 Silverlight 实现大多数示例的响应式(Reactive)编程的演讲。演讲已被录制,样本也可供下载,因此这可能是一个有用的资源:

  • 见我的博客 with links to source, recording and slide

  • 要回答您的具体问题,我认为您不能使用在 XAML 文件中指定事件处理程序的常用样式(这可能适用于 F# Silverlight 应用程序,但您必须使用 member 而不是 let 函数)。

    但是,编写 Silverlight 组件的最佳方式(我能想到的)是只拥有一个 F# Silverlight 库并从 C# Silverlight 应用程序中使用它。在这种情况下,您需要在代码中编写事件处理程序绑定(bind)。一个简化的示例(来自演讲中的一个示例)如下所示:
    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!")
    

    关于silverlight - 在 xaml 中添加 f# 函数作为事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135952/

    相关文章:

    c# - 在 C# 中删除事件处理程序

    javascript - 事件监听器无法一致地工作 Javascript

    xaml - "non-intrusive code-behind"是好还是坏的做法?

    JavaFX - 事件期间的操作

    html - silverlight 应用程序的浏览器滚动条问题。(Html)

    wpf - C# 中按钮单击命令的绑定(bind)

    c# - 是否可以通过单击按钮事件导航到枢轴控制页面

    c# - MVVM-从ViewModel访问View中的xaml元素

    c# - WPF:绑定(bind)到目录

    silverlight - 有没有办法从 ViewModel 中调用 Navigate?