键盘加速器与RepeatButton

时间:2017-11-13 07:58:26

标签: c# xaml uwp keyboard

如果您按住按钮,则RepeatButton会及时重复Map<Integer, Integer> sums = new HashMap<>(); for (LiveEventsDto car: cars) { int key = car.getProgramId(); int count = car.getProgramPercentTotalViewed(); if (sums.containsKey(key) { count += sums.get(key); } sums.put(key, count); } 个事件Click。在UWP中支持键盘快捷键有非常好的KeyboardAccelerator支持。但它在一起并不像预期的那样有效:

Interval

现在按 Control + K 定期调用<RepeatButton Content="Click me" Interval="500" Click="RptBtn_Click" > <RepeatButton.KeyboardAccelerators> <KeyboardAccelerator Modifiers="Control" Key="K" /> </RepeatButton.KeyboardAccelerators> </RepeatButton> 事件,但不是500 ms间隔,如{{1}中所设置但是要快得多。发生这种情况的原因是RptBtn_Click重复调用RepeatButton事件,但没有按住执行KeyBoardAccelerator行为的按钮。

Documentation说:

  

按照设计,加速器自动重复(例如,当用户   按Ctrl + Shift然后按住M,调用加速器   反复直到M被释放)。无法修改此行为。

好的,我理解为什么。但我不知道如何向RepeatButton添加键盘快捷键

2 个答案:

答案 0 :(得分:0)

在这种情况下,您无法修改重复应用加速器的间隔行为,只能修改UI点击事件本身。 您可以在事件处理程序中手动处理计时器,以将事件标记为已处理,除非自上次调用以来已经过了间隔。或者,您可以删除加速器并处理keyDown事件。

答案 1 :(得分:0)

根据Microsoft's Documentation,首次使用加速器时,需要设置KeyboardAcceleratorInvokedEventArgs.Handled = True。据我了解,这停止了重复。不幸的是,根据您的代码,您将无权访问该对象,因为它看起来像您可以调用MenuFlyoutItem.Click事件方法,据我所知,该方法不应该/不能完成。该文档指出,KeyboardAccelerator标记应包含属性“ Invoke”,该属性设置为按下组合键时要调用的方法。

此外,该调用所调用的方法与签名的事件与“ click”事件不同,因此您将需要从加速器调用中调用click事件,或者需要同时拥有加速器和点击事件调用完成您要完成的任务的第三个方法。我选择使用第三种方法来完成这项工作。

不幸的是,我无法让KeyboardAccelerators完全起作用!。