F#WPF事件:“阻止这个'让'未完成。期待一个表达”

时间:2013-11-15 22:52:56

标签: wpf f# f#-3.0

这让我疯了。我在微软的功能示例中寻找here。 我看不出我做错了什么。

所以,我正在尝试使用F#和WPF,我找到了一个有效的在线项目模板。 Here it is。我即将开始。遗憾的是,设计人员无法通过双击C#中的元素来生成F#代码中的事件。但是哦,我可以设置Click的功能。我决定手动完成所有操作。

这是我的有缺陷的尝试:

module MainApp

open System
open System.Windows
open System.Windows.Controls
open FSharpx

let mutable doc = ""

type MainWindow = XAML<"MainWindow.xaml">

let loadWindow() =
   let window = MainWindow()

   // Your awesome code code here and you have strongly typed access to the XAML via "window"

   window.Root

   let make (sender:Object, e:RoutedEventArgs) =
    doc<- doc +"<?xml version=\"1.0\" standalone=\"no\"?>"
    0


[<STAThread>]
(new Application()).Run(loadWindow()) |> ignore

无论如何,它不喜欢让make上线。它给了我这个错误:

Block following this 'let' is unfinished. Expect an expression

然而,显然我在MSDN上阅读

  The compiler uses the final expression in a function body to determine the return value and type

所以,它有一个回归,它是一个未完成的表达式?

1 个答案:

答案 0 :(得分:5)

您应该从window.Root返回loadWindow。现在loadWindow内的最后一段代码是make函数的声明,它是无效的。请记住,缩进确定F#中的范围。

如果您想添加新功能make,但loadWindow的主体基本上是空的,则需要正确对齐缩进:

let loadWindow() =
   let window = MainWindow()

   // Your awesome code code here and you have strongly typed access to the XAML via "window"

   window.Root

let make (sender:Object, e:RoutedEventArgs) =
    doc<- doc +"<?xml version=\"1.0\" standalone=\"no\"?>"
    0