2

WPF 控件如何知道鼠标事件发生在它上面,以便它可以引发鼠标事件。

例如,Button 控件如何知道捕获 MouseDown 和 MouseUp 事件并将其转换为单击事件。

4

1 回答 1

5

Windows 使用消息传递模型来通知 GUI 元素正在发生的事情。Windows 将这些消息放入一个消息队列中,每个窗口都不断地检查这个队列以查看存在哪些消息。这通常称为消息循环。然后窗口负责接收发往它自己的消息,并执行必要的操作(例如引发用户代码响应的事件)。我建议阅读以了解有关消息循环和消息的更多信息。

在 WinForms 中,每个控件都是自己的窗口,因此每个控件都有自己的消息队列。这不是 WPF 的情况。WPF 以不同的方式处理这一点,因为 WPF 将整个窗口视为一个项目,在运行时组合必要的元素。我建议阅读本文以了解有关 WPF 如何处理这种情况的更多信息。

除了我在这里列出的资源之外,还有许多其他资源,如果您只是搜索 Windows 消息、Windows 消息循环并将 WPF 加入其中。

于 2013-03-18T16:01:32.880 回答