Событие нажатия клавиши родительской страницы срабатывает даже после обработки в пользовательском элементе управления

#uwp

#uwp

Вопрос:

У меня есть IndexPage с событием CoreWindow_KeyDown. Оно срабатывает, когда я нажимаю клавишу. Это верно. Если я нажимаю клавишу на пользовательском элементе управления, который содержит событие PreviewKeyDown / KeyDown, событие CoreWindow_KeyDown indexpage также срабатывает вместе с событием PreviewKeyDown / KeyDown пользовательского элемента управления.

 UserControl_PreviewKeyDown, e.Handled = true
UserControl_KeyDown, e.Handled = true
  

Как предотвратить запуск события IndexPage CoreWindow_KeyDown, если оно обрабатывается пользовательским элементом управления?

Ответ №1:

Событие нажатия клавиши родительской страницы срабатывает даже после обработки в пользовательском элементе управления

Это сделано специально, установите e.Обработанный как true для UserControl_PreviewKeyDown не отключит пузырь события маршрута на CoreWindow .

Для вашего требования, из-за условия запуска PreviewKeyDown is, что элемент управления должен быть сфокусирован, мы могли бы объявить свойство bool и установить его как true, когда элемент управления сфокусирован. И используйте это свойство bool, чтобы отключить логику процесса в CoreWindow_KeyDown событии.

 private void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
    if (!_isFocus)
    {
        System.Diagnostics.Debug.WriteLine("---------!_isFocus-----------");
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("---------_isFocus-----------");
    }
}

private bool _isFocus;
private void MyCC_GettingFocus(UIElement sender, GettingFocusEventArgs args)
{
    _isFocus = true;
}

private void MyCC_LosingFocus(UIElement sender, LosingFocusEventArgs args)
{
    _isFocus = false;
}