/// <summary> /// 键盘操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnPreviewKeyDown(object sender, KeyEventArgs e) { if (_target != sender) { return; } e.Handled = true; //如果外部已经禁用用户输入或内部正在处理,终结事件并返回 if (!CanAcceptUserInput || CurrentElement == null) { return; } #region 输入检查 //控件内部需求检查 e.Handled = false; //返回值true:继续往下执行,false:停止后续步骤,注意e.Handled决定是否继续内部传递 if (!CurrentElement.OnFlowKeyDown(e)) { return; } e.Handled = true; var pressKey = ""; if (e.Key == Key.Enter || e.Key == Key.Down || e.Key == Key.Right || e.Key == Key.Tab) { pressKey = "DOWN"; } else if (e.Key == Key.Up || e.Key == Key.Left) { pressKey = "UP"; } #endregion if (pressKey == "DOWN") { MoveFocusHost(FlowNavigation.Forward); } else if (pressKey == "UP") { MoveFocusHost(FlowNavigation.Backward); } else { e.Handled = false; } }