我有一个包含inputbindings的UI。
<Window.InputBindings>
<KeyBinding
Key="Up"
Command="{Binding Up}" />
我想使用这个键绑定来向下滚动各种元素。我可以使用像这样的方法在窗口中使用in build key-down repeat。
public void selectionUp()
{
SelectionNo += 1;
}
这很有效。如果我按向上键,选择将向上移动。但是,根据用户在Windows中对键盘重复进行的任何设置,我不喜欢事件看起来很慢的方式。所以我想做这样的事情:
所以我最终得到了这样的方法......
public void positionUp()
{
if (!keyUpIsDown) //needed to prevent this while loop being accessed multiple times
{
keyUpIsDown = true;
while (keyUpIsDown)
{
SelectionNo += 1;
if (Keyboard.IsKeyUp(Key.Up))
{
keyUpIsDown = false;
}
}
}
}
我遇到的问题是'if(Keyboard.IsKeyUp(Key.Up))'总是说即使我已经释放了密钥,密钥也会关闭。
我该如何解决这个问题?
答案 0 :(得分:1)
您需要让它有机会处理来自操作系统的事件。一种方法是使代码异步并添加Task.Delay。
public async void positionUp()
{
if (!keyUpIsDown) //needed to prevent this while loop being accessed multiple times
{
keyUpIsDown = true;
while (keyUpIsDown)
{
SelectionNo += 1;
if (Keyboard.IsKeyUp(Key.Up))
{
keyUpIsDown = false;
}
await Task.Delay(100); //you will need to tune this, but it can't be 0
}
}
}