在UWP应用程序中,我需要从游戏手柄输入。它工作正常,但当用户移动拇指杆时,我也会得到当前插入符号在应用程序中移动的不必要的副作用。如何防止插入符移动?
该应用主要基于MVVM和MVVM灯,但Gamepad是在视图后面的代码中处理的。
这是后面代码中的视图构造函数(视图名为Settings
,派生自Page
)。
public Settings()
{
InitializeComponent();
// Gamecontroller
gameControllerUpdateTimer = new DispatcherTimer();
gameControllerUpdateTimer.Tick += gameControllerUpdateTimer_Callback;
gameControllerUpdateTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
GameControllerConnected = false;
Gamepad.GamepadAdded += Gamepad_GamepadAdded;
Gamepad.GamepadRemoved += Gamepad_GamepadRemoved;
}
和三个事件处理程序:两个用于Gamepad检测和删除,另一个用于读取Gamepad输入。
// Called periodically to check for user input throught the gamepad
void gameControllerUpdateTimer_Callback(object sender, object e)
{
if (GameControllerConnected)
{
Gamepad gamePad = Gamepad.Gamepads[0];
GamepadReading readings = gamePad.GetCurrentReading();
LeftThumbStickX = readings.LeftThumbstickX;
LeftThumbStickY = readings.LeftThumbstickY;
}
}
// Called upon gamepad detection
async void Gamepad_GamepadAdded(object sender, Gamepad e)
{
await Dispatcher.RunAsync(
CoreDispatcherPriority.Normal, () =>
{
GameControllerConnected = true;
gameControllerUpdateTimer.Start();
});
}
// Called upon gamepad removal
async void Gamepad_GamepadRemoved(object sender, Gamepad e)
{
await Dispatcher.RunAsync(
CoreDispatcherPriority.Normal, () =>
{
GameControllerConnected = false;
gameControllerUpdateTimer.Stop();
});
}
编辑:下面是我正在处理的应用的屏幕截图。插入符/光标位于Textbox
之一。当我在Gamepad
上移动左侧拇指操纵杆时,插入符号/光标也会移动:它从一个Textbox
移动到另一个,或者更好地说它会导致应用程序更改当前关注的UI控件。
答案 0 :(得分:1)
为什么不在视图顶部KeyDown
使用UIElement
事件?
private void Grid_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
if(e.Key == Windows.System.VirtualKey.GamepadLeftThumbstickLeft ||
e.Key == Windows.System.VirtualKey.GamepadLeftThumbstickRight ||
e.Key == Windows.System.VirtualKey.GamepadLeftThumbstickDown ||
e.Key == Windows.System.VirtualKey.GamepadLeftThumbstickUp)
{
// do something or... nothing
e.Handled == true;
}
}