#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;
}