如果按下向下箭头键很长一段时间,我该如何检测

本文关键字:何检测 检测 一段时间 如果 | 更新日期: 2023-09-27 17:57:41

我有一个问题不知道如何解决。。。我有一个列表框,里面可能有很多项目。

当用户选择一个项目时,我进行异步调用,获取一些数据并填充屏幕。用户可以按向下箭头键或向上箭头键在项目之间导航,问题是当用户按住向下箭头键时,选择变化很快,我的应用程序出现问题。。。。有没有一种干净的方法可以检测到用户按下了向下键一段时间,暂停更新视图,并且只有在他释放视图后才进行更新?

如果我解释不清楚,我很抱歉,

如果按下向下箭头键很长一段时间,我该如何检测

您是否正在尝试异步。。。

  1. 。。。更新填充列表框的集合,或者
  2. 。。。是否根据列表框中当前选定的项目更新单独的视图

我猜在#2,当您启动大量异步调用来更新单独的视图时,会遇到问题。正如@Ramhound所指出的,按住按钮和快速点击同一按钮(或者作为一名韩国育婴战争职业玩家点击离开)快速更改选择没有区别。要解决这两个问题,您可以执行以下操作:

  1. 设置一个计时器,在选择更改时重置该计时器。只有在异步查询超时后才启动它。这将过滤掉非常的快速选择更改
  2. 请确保一次只有一个正在进行的查询,因此在启动新的异步调用之前,请取消并清理前一个调用

通过这种方式,用户可以对所选内容进行任何操作,但仍然只有在她真正选择了内容后才进行更新。调整时间以确保UI仍然快速:)

如果控件是可聚焦的,您可以覆盖UIElement.OnKeyDown

因此,在这种情况下,这意味着本质上创建列表框的子类,然后重写OnKeyDown函数。你可以用这种方式抓住它,但这会让事情变得更加混乱。

或者您可以使用Keyboard.GetKeyStates.查询密钥状态

不过,IMHO,您应该只是预加载数据。ListBoxes使用了一个"虚拟化堆栈面板",它足够智能,不会显示不需要的信息。