在 UWP 应用程序中如何防止游戏手柄也移动插入符号?
In a UWP app how to prevent the Gamepad to move the caret too?
在 UWP 应用程序中,我需要来自游戏手柄的输入。它工作正常,但我也得到了不必要的副作用,即当用户移动拇指杆时,当前插入符号在应用程序中移动。如何防止插入符号移动?
该应用程序主要基于 MVVM with MVVM light,但 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;
}
和三个事件处理程序:两个用于游戏手柄检测和移除,一个用于读取游戏手柄输入。
// 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();
});
}
编辑:下面是我正在开发的应用程序的屏幕截图。 caret/cursor 在 Textbox
之一中。当我在 Gamepad
上移动左摇杆时,caret/cursor 也会移动:它从一个 Textbox
移动到另一个,或者更好的说法是它会导致应用程序更改当前聚焦的 UI控制.
为什么不在您的视图 UIElement
顶部使用 KeyDown
事件?
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;
}
}
在 UWP 应用程序中,我需要来自游戏手柄的输入。它工作正常,但我也得到了不必要的副作用,即当用户移动拇指杆时,当前插入符号在应用程序中移动。如何防止插入符号移动?
该应用程序主要基于 MVVM with MVVM light,但 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;
}
和三个事件处理程序:两个用于游戏手柄检测和移除,一个用于读取游戏手柄输入。
// 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();
});
}
编辑:下面是我正在开发的应用程序的屏幕截图。 caret/cursor 在 Textbox
之一中。当我在 Gamepad
上移动左摇杆时,caret/cursor 也会移动:它从一个 Textbox
移动到另一个,或者更好的说法是它会导致应用程序更改当前聚焦的 UI控制.
为什么不在您的视图 UIElement
顶部使用 KeyDown
事件?
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;
}
}