使用WPF中的按钮调用F#函数(FsXaml方法)

时间:2019-01-09 13:55:34

标签: wpf f# fsxaml

我正在尝试使用F#,WPF和FsXaml制作Button Hello World应用程序。我开始遵循本指南:

https://www.c-sharpcorner.com/article/create-wpf-application-with-f-sharp-and-fsxaml/

当我在xaml上加载所有内容并进行编译时,一切工作都很好,但是我没有设法通过按下按钮来调用函数,并且指南在他解释如何调用函数之前就结束了。

我周围有很多不同的方法,但是对我来说还没有任何效果(而且许多指南都已经问世了,所以自框架以来发生了很多事情)。有了一个可行的(简单的)起点,当我了解使用FsXaml时x.xaml和x.xaml.fs之间的逻辑时,便可以开始构建。

我在MainWindow.xaml上的按钮:

<Button x:Name="submitButton" Content="Send" Click="submitButton_Click"/>

我在MainWindow.xaml的window -section中也有这个

xmlns:local="clr-namespace:Views;assembly=GUItemplate"

我的MainWindow.xaml.fs:

namespace GUItemplate

open FsXaml  
open System.Windows

type MainWindowBase = XAML<"MainWindow.xaml">

type MainWindow() =
    inherit MainWindowBase()

    override this.submitButton_Click (sender: obj, e: RoutedEventArgs) = 
        MessageBox.Show("Hello world!")
        |> ignore

我当前遇到的错误:

System.Windows.Markup.XamlParseException
HResult=0x80131501
Message='Failed to create a 'Click' from the text 'submitButton_Click'.' Line number '29' and line position '101'.
Source=PresentationFramework

Inner Exception 1:
ArgumentException: Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type.

1 个答案:

答案 0 :(得分:0)

这就是我在VS 2017中进行的方式,对我而言它有效。 我添加了UIAutomationTypes引用并安装了NuGet FsXaml.Wpf

open System
open System.Windows
open FsXaml

type MainWindowBase = XAML<"MainWindow.xaml">

type MainWindow() =
    inherit MainWindowBase()

    override this.submitButton_Click (sender: obj, e: RoutedEventArgs) = 
        MessageBox.Show("Hello world!")
        |> ignore

[<EntryPoint;STAThread>]  
let application = new Application() in
    let mainWindow = new MainWindow() in
        application.Run(mainWindow) |> ignore