Trocando o Enter pelo Tab em WPF

 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;

  }

}

 

Published Thu, Dec 27 2007 9:25 by bsonnino

Filed under:

Comments

# re: Trocando o Enter pelo Tab em WPF@ Friday, November 28, 2008 10:22 AM

Bruno,

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

Grato,

Diego

Diego

# re: Trocando o Enter pelo Tab em WPF@ Friday, November 28, 2008 10:51 AM

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;

bsonnino

# re: Trocando o Enter pelo Tab em WPF@ Friday, November 28, 2008 11:45 AM

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,

Diego

# re: Trocando o Enter pelo Tab em WPF@ Friday, November 28, 2008 12:05 PM

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

bsonnino

Leave a Comment

(required) 
(required) 
(optional)
(required)