Sharpdx grabit输入将无法与Windows 10通用应用程序
问题描述:
我试着用通用应用程序在Windows 10 sharpdx takeit并无法获得输入工作。我知道我必须为不同的设备创建不同的输入,但现在我只想尝试键盘。Sharpdx grabit输入将无法与Windows 10通用应用程序
所以我请点击此链接率先成立项目:Is there a SharpDx Template, for a Windows Universal App?
而现在我想输入像我通常做的那样:
在constuctor:
_keyboardManager = new KeyboardManager(this);
在更新方法:
var state = _keyboardManager.GetState();
if (state.IsKeyDown(Keys.B))
{
//do stuff
}
但他从来没有注册的关键B (或者我尝试过的任何其他键)。我也尝试过GetDownKeys(),但列表总是空的。
那么,任何人都不知道该怎么办?
答
而且还有一个又一个,更好,更方便的版本:
using Windows.UI.Core;
using SharpDX.Toolkit;
using Windows.System;
namespace Example
{
class MyGame : Game
{
public MyGame()
{
CoreWindow.GetForCurrentThread().KeyDown += MyGame_KeyDown;
}
void MyGame_KeyDown(CoreWindow sender, KeyEventArgs args)
{
System.Diagnostics.Debug.WriteLine(args.VirtualKey);
}
}
}
你要订阅CoreWindow的事件,这是它:)
答
HEUREKA!
我有同样的问题,但与Windows 8.1。我花了2天才找到解决方案。这是愚蠢的SwapChainPanel,因为该类不从Control类继承,所以它不能处理键盘事件,因此无法集中注意力。
解决方案是HERE也就是说,您必须放置一个继承自Control类的XAML元素,例如Button来处理事件。我的XAML文件是这样的:
<SwapChainPanel x:Name="_swapChainPanel"
Loaded="_swapChainPanel_Loaded"
KeyDown="_swapChainPanel_KeyDown">
<Button x:Name="_swapChainButton"
Content="Button"
HorizontalAlignment="Left"
Height="0"
VerticalAlignment="Top"
Width="0"
KeyDown="_swapChainButton_KeyDown">
</Button>
</SwapChainPanel>
在XAML.cs我处理的事件是这样的:
private void _swapChainButton_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
e.Handled = false; //This will pass the event to its parent, which is the _swapChainPanel
}
private void _swapChainPanel_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
game.KeyboardEvent();
}
在的KeyboardEvent()方法,我把,如果事情......你有使用代码手动使按钮处于焦点状态。 “_swapChainButton.Focus(FocusState.Programmatic);”
但是最后,它对我来说并不好,它太慢了。它有延迟。 :/
对不起,我迟到发表评论,但这个工作完全正常。谢谢 :) – user1776562