2013-07-12 13 views

答えて

5

あなたは(あなたがキープレスの先頭または末尾に次のいずれかに行きたいかに応じて)あなたのTextBoxのKeyDownイベント/ keyUpイベントイベントを処理することができます。

例XAML:後ろ

<TextBox KeyUp="TextBox_KeyUp" /> 

コード:

private void TextBox_KeyUp(object sender, KeyRoutedEventArgs e) 
    { 
     TextBox tbSender = (TextBox)sender; 

     if (e.Key == Windows.System.VirtualKey.Enter) 
     { 
      // Get the next TextBox and focus it. 

      DependencyObject nextSibling = GetNextSiblingInVisualTree(tbSender); 
      if (nextSibling is Control) 
      { 
       // Transfer "keyboard" focus to the target element. 
       ((Control)nextSibling).Focus(FocusState.Keyboard); 
      } 
     } 
    } 

GetNextSiblingInVisualTree()ヘルパーメソッドのコードを含む完全なコード例: https://github.com/finnigantime/Samples/tree/master/examples/Win8Xaml/TextBox_EnterMovesFocusToNextControl

注意とフォーカス()を呼び出すことFocusState.Keyboardは、コントロールテンプレート内にそのような矩形を持つ要素の周りに点線のフォーカス矩形を表示します(例: g。ボタン)。 FocusState.PointerでFocus()を呼び出すとフォーカス矩形が表示されません(タッチ/マウスを使用しているため、どの要素を操作しているのかわかります)。

+0

ありがとうございました。それは治療に役立ちます。 – Sun

1

「GetNextSiblingInVisualTree」機能を少し改善しました。このバージョンは、次のオブジェクトの代わりに次のTextBoxを検索します。

private static DependencyObject GetNextSiblingInVisualTree(DependencyObject origin) 
    { 
     DependencyObject parent = VisualTreeHelper.GetParent(origin); 

     if (parent != null) 
     { 
      int childIndex = -1; 
      for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); ++i) 
      { 
       if (origin == VisualTreeHelper.GetChild(parent, i)) 
       { 
        childIndex = i; 
        break; 
       } 
      } 

      for (int nextIndex = childIndex + 1; nextIndex < VisualTreeHelper.GetChildrenCount(parent); nextIndex++) 
      { 
       DependencyObject currentObject = VisualTreeHelper.GetChild(parent, nextIndex); 

       if(currentObject.GetType() == typeof(TextBox)) 
       { 
        return currentObject; 
       } 
      } 
     } 

     return null; 
    } 
関連する問題