6

任何人都可以命名一个应用程序实例,其中单击实体(例如图像)会做一件事,但如果你双击它,它会做一些不同的事情吗?

我能找到的唯一例子是在 iTunes 中双击一个曲目,然后选择它(单击功能)然后播放它(双击功能),这意味着(逻辑上)双击是超集(包含单击)。

基本上,我被要求实现(在 WPF 中)一个图像单击做一件事,一个图像双击做另一件事,我不确定这在概念上是否正确。

如果有人有任何人明智地这样做的例子,那将不胜感激?

4

8 回答 8

18

从 Windows 消息传递的角度来看,双击总是首先生成单击消息;Windows 无法提前预测另一次单击会及时将其变为双击。我无法想象 WPF 会向你隐藏这个物理事实。

于 2009-06-09T15:49:49.483 回答
11

回答直接问题:双击与单击 - 这些是相互排斥的吗?答案是否定的,由于 Windows 需要用鼠标解释您的行为的方式,这些并不是相互排斥的。

但是,在回答有关双击不包括单击行为的先例[即这两个事件表现出互斥行为]的更模糊问题时,Windows 中有一些特定事件似乎表现出您的行为'重新询问。

例如 - 任务栏小程序:

  • 单击通常会打开该项目的快捷菜单。
  • 双击通常会打开该任务栏项所链接到的应用程序的属性菜单,而无需打开快捷菜单。

任务栏时钟:

  • 单击没有任何作用。
  • 双击打开日期和时间属性。

但是,您可能会注意到响应您的请求需要一些时间,并且正如其他人所指出的,暂停是 Windows 等待查看您是否要双击。如果您不双击,则会触发 Click 行为。如果您双击,则会触发 DoubleClick 行为。在这些特定情况下,相互排斥的行为被认为是合适的,并且可能还有其他一些行为。

我认为这真的取决于不同行为是“对”还是“错”的情况——我认为你不能含糊地说在所有情况下一个是对的,另一个是错的。如果您希望展示的行为从用户的角度(而不是从您自己的程序员的角度)具有良好的逻辑意义,那么请确保该行为是互斥的;但是,如果它对用户没有很好的逻辑意义,那么请避免使用它。

于 2009-06-09T15:59:33.433 回答
2

使双击执行与单击行为无关的操作通常是一种不好的模式。为了区分单击和双击,您必须等待片刻才能看到第二次单击是否到达。当您只是单击某些东西时,这可能会导致令人不安的延迟。

Raymond Chen 在这个问题上有一篇很好的博客文章,包括如何去做。

但我会先反对设计师。

于 2009-06-09T16:12:16.607 回答
1

最明显的似乎是 Finder/Explorer,单击文件将其选中,然后双击将其打开。这类事情有很多先例,并且人们通过将其包含在操作系统级别中训练有素,以期望双击来做不同的事情。

  • 文本选择(几乎存在于每个应用程序中) - 单击以放置光标,双击以选择单词,三次单击以选择整行。
  • Explorer / Finder - 单击选择一个文件,双击打开它。
  • Outlook - 单击可预览电子邮件,双击可在新窗口中打开。
于 2009-06-09T15:49:39.577 回答
1

Cooliris中,如果您单击墙上的一个单元格,它将被选中。如果双击图像,它会从该图像开始转换到全屏幻灯片放映模式。

于 2009-06-09T15:49:55.647 回答
0

微软 Excel。将鼠标移到未选中的单元格上。

单击 = 单元格选择

双击 = 进入该单元格的编辑模式

于 2009-06-09T15:51:11.763 回答
0

总结其他人在这里所说的话,双击不会“取消”单击。

因此,您永远不应该在双击事件中执行取决于通过单击更改的状态的操作 - 因为单击总是首先执行!

反过来,您可以依靠单击后的状态在开始双击操作时有效。示例:在文件列表中单击选择文件,因此在双击事件中您知道单击的文件被选中...

于 2009-10-26T08:54:20.500 回答
0
private void OnItemMouseDown(object sender, MouseButtonEventArgs e) {
    if(e.ClickCount==2) {
        // DoubleClick Function
    }

    if(e.ClickCount==1) {
        // Click Function
    }
}
于 2011-04-12T09:18:48.547 回答