wpf - F# WPF MouseMove 参数

标签 wpf user-interface f# msdn

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/

相关文章:

c# - 如何打印缩放和旋转的图像

c# - 多行 WPF 格式化文本中特定字符的坐标

c# - 如何从 WPF PolyLine 对象移动所有坐标?

java - 编辑另一个类的对象?

macos - 如何从终端在 Mac 上运行 fsharp 测试?

F# 类型的自定义比较运算符

f# - 比较每个列表中唯一项目的两个列表

通过 XAML 绑定(bind) WPF TreeView

javascript - 如何使用 jQuery 预格式化电话号码字段?

c++ - 当从类构造函数中用于窗口类时,为什么winapi坚持使用PCSTR而不是PCWSTR?