canvas.MouseMove.Add(move canvas update)
MouseMove.Add( p1 p2 p3)
通常我看到这个用法和文档,两个参数—— (对象发送者,MouseEventArgs e) -- 我在这个示例代码中将其视为移动和 Canvas ,取自 F#.NET Journal's 计算几何:快速船体。
更新是否有一些延迟?或将气泡信息路由到 MouseMove.Add?
我只是不明白。欢迎任何帮助。谢谢。艺术
最佳答案
kvb 的回答给出了所有的理论,所以我想我也可以添加一个代码示例。我不知道该片段的来源,所以我会根据名称做出一些猜测 - 希望它能有用,即使它可能与原始样本不完全相同。
正如 kvb 所说,代码 move canvas update
实际上是一个函数调用,它返回一个函数,然后作为处理程序添加到 MouseMove
事件。
这意味着 move
可以声明如下:
let move (canvas:Canvas) (update:unit -> unit) (me:MouseEventArgs) =
// This function gets called when the mouse moves
// - values me.X and me.Y give the current mouse location
// - we can access 'canvas' that was declared when registering handler
// - we can call 'update' to do some more work...
// Pseudo-example:
canvas.Children.[0].Width <- me.X
update()
在注册事件处理程序时,代码move canvas update
指定了move
函数的前两个参数,这样处理程序就可以访问canvas
可能在注册处理程序的地方声明的值(不使用可变变量!)
let canvas = new Canvas() // Create canvas
let update () = ... // some function that performs update
// Register handler and give it canvas and update as first two arguments
canvas.MouseMove.Add(move canvas update)
这也可以解释为什么事件处理程序不需要将 sender:object
作为第一个参数 - 您可以将 canvas
(即发送者)作为第一个参数以静态类型的方式使用部分函数应用(因此您不必将object
转换为Canvas
)。
关于wpf - F# WPF MouseMove 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8978297/