private void DatePicker_PreviewKeyDown(object sender, KeyEventArgs e) { TraversalRequest vector = null; switch (e.Key) { case Key.Enter: vector = new TraversalRequest(FocusNavigationDirection.Next); break; case Key.Down: vector = new TraversalRequest(FocusNavigationDirection.Next); break; case Key.Up: vector = new TraversalRequest(FocusNavigationDirection.Previous); break; //case Key.Right: // vector = new TraversalRequest(FocusNavigationDirection.Next); // break; //case Key.Left: // vector = new TraversalRequest(FocusNavigationDirection.Previous); // break; } FocusControl.SetFocusWithOrder(vector); }
private void Combobox_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { FocusControl.SetFocusWithOrder(new TraversalRequest(FocusNavigationDirection.Next)); UIElement element = Keyboard.FocusedElement as UIElement; e.Handled = true; } }
/// <summary> /// Enter、Tab、矢印キーによるフォーカス移動 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MaskedTextBox_KeyDown(object sender, KeyEventArgs e) { TraversalRequest vector = null; switch (e.Key) { case Key.Enter: if (cAcceptsReturn == true) { // 改行許可の場合はフォーカス移動しない return; } vector = new TraversalRequest(FocusNavigationDirection.Next); break; case Key.Down: vector = new TraversalRequest(FocusNavigationDirection.Next); break; case Key.Up: vector = new TraversalRequest(FocusNavigationDirection.Previous); break; //左右の矢印キーではフィールドを移動しない //case Key.Right: // if (MaskedTextBox.SelectionStart < MaskedTextBox.Text.Length) // { // return; // } // vector = new TraversalRequest(FocusNavigationDirection.Next); // break; //case Key.Left: // if (MaskedTextBox.SelectionLength > 0 || MaskedTextBox.SelectionStart > 0) // { // return; // } // vector = new TraversalRequest(FocusNavigationDirection.Previous); // break; } if (vector != null) { FocusControl.SetFocusWithOrder(vector); UIElement element = Keyboard.FocusedElement as UIElement; if (element is Button || element is ComboBox) { e.Handled = true; } } }
public static void SetFocusWithOrder(TraversalRequest vector) { if (vector != null) { UIElement element = Keyboard.FocusedElement as UIElement; if (element != null) { FocusControl.SkipRadioButton(element, vector); element = Keyboard.FocusedElement as UIElement; if (element != null) { Type tp = element.GetType(); if (tp.Name.StartsWith("Ribbon")) { // リボンコントロールに移動したら入力可能な先頭のフィールドに強制移動する FocusControl.SetFocusToTopControl(Window.GetWindow(element)); } } } } }
/// <summary> /// フォーカス移動 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cPasswordBox_KeyDown(object sender, KeyEventArgs e) { TraversalRequest vector = null; switch (e.Key) { case Key.Enter: vector = new TraversalRequest(FocusNavigationDirection.Next); break; case Key.Down: vector = new TraversalRequest(FocusNavigationDirection.Next); break; case Key.Up: vector = new TraversalRequest(FocusNavigationDirection.Previous); break; } if (vector != null) { e.Handled = true; FocusControl.SetFocusWithOrder(vector); } }