【Silverlight】 Enterキー押下時に、次のコントロールにフォーカスを移すには

// キーが押された時のイベント
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
    // Enterキーが押された場合
    if ((Keyboard.Modifiers == ModifierKeys.None) && (e.Key == Key.Enter))
    {
        // 次のコントロールへフォーカスを移す
        Control ctl = GetNextChildren(this);
        if (ctl != null) ctl.Focus();
    }
}

// 次の子要素を取得します。
public Control GetNextChildren(DependencyObject obj)
{
    var parent = VisualTreeHelper.GetParent(obj);
    if (parent != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);
            //自分自身と一致した場合
            if (obj == child)
            {
                // 次の要素を取得
                for (int j = i + 1; j < 
                    VisualTreeHelper.GetChildrenCount(parent); j++)
                {
                    var nextChild 
                        = VisualTreeHelper.GetChild(parent, j) as Control;
                    if (nextChild != null) return nextChild;
                }

                // 最初の要素へ戻る
                for (int k = 0; k < 
                    VisualTreeHelper.GetChildrenCount(parent); k++)
                {
                    var nextChild
                         = VisualTreeHelper.GetChild(parent, k) as Control;
                    if (nextChild != null) return nextChild;
                }
            }
        }
    }

    return null;
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中