Uma pergunta muito comum que vejo por aí é como trocar o Enter pelo Tab. Normalmente, deve-se manipular o evento de tecla pressionada, verificar se é um Enter e mudar o foco para o elemento seguinte na lista de tabulação. Em WPF, podemos criar um manipulador para o evento PreviewKeyDown da janela (no WPF, os eventos são propagados por toda a árvore de elementos, assim, os eventos de tecla obrigatoriamente passam pela janela, independente de onde tenham sido gerados), como o seguinte:


private void Window_PreviewKeyDown(object sender, KeyEventArgs e)

{

  if (e.Key ==
Key.Return)

  {

    FocusNavigationDirection focusDirection = FocusNavigationDirection.Next;

    TraversalRequest
request =
new TraversalRequest(focusDirection);

    UIElement
elementWithFocus =
Keyboard.FocusedElement as
UIElement;

    if
(elementWithFocus !=
null)

      elementWithFocus.MoveFocus(request);

    e.Handled = true;

  }

}

 

4 Thoughts on “Trocando o Enter pelo Tab em WPF

  1. Bruno,
    Tenho como definir essa operação para todos os Texbox da minha aplicação???

    Grato,

    Diego

  2. bsonnino on November 28, 2008 at 10:51 am said:

    Não vejo por que não. Esta operação funciona em toda a janela. Se você quer pular os elementos que não sejam TextBoxes, pode colocar algo assim:

    while (elementWithFocus != null && elementWithFocus != TextBox)

    elementWithFocus.MoveFocus(request);

    e.Handled = true;

  3. Eu queria deixar como padrão para todas as telas, sem ter que usar o PreviewKeyDown em cada uma, existe um jeito de fazer isso???

    grato,

  4. bsonnino on November 28, 2008 at 12:05 pm said:

    Eu faria uma classe onde colocaria o código e derivaria as janelas onde quero este código desta nova janela.

    Outra maneira seria criar um UserControl sem nada onde você coloca este código e coloca seu UserControl na janela e o conteúdo dentro dela

Leave a Reply

Your email address will not be published. Required fields are marked *

Post Navigation