Como posso fazer com que um controle perca o foco se o usuário clicar em algo que não é focado?

StackOverflow https://stackoverflow.com/questions/2298913

  •  21-09-2019
  •  | 
  •  

Pergunta

Eu tenho um itemsControl cheio de dezenas de itens; Cada item é uma caixa de texto vinculada e alguns botões. Como eu quero que o usuário possa guiar da caixa de texto para a caixa de texto, os botões têm foco definido como false. Isso funciona muito bem. O único problema é que, como as caixas de texto não estão perdendo o foco, sua ligação não está atualizando a fonte, portanto o código atrás dos botões não está funcionando com os valores certos.

Eu posso pensar em uma maneira de corrigir isso, por exemplo, com o manipulador de cliques para os botões navegar pela árvore lógica até a caixa de texto associada e a criação está vinculando a atualização da fonte explicitamente. Mas parece -me que deve haver uma maneira melhor do que isso, o que provavelmente seria óbvio para mim se eu tivesse uma melhor compreensão do modelo de foco. Existe?

Foi útil?

Solução

Como o desempenho é um problema, você pode encontrar um artigo escrito por Josh Smith útil. O contexto é muito semelhante ao seu problema. Josh resolve -o desencadeando a atualização de ligação manualmente:

    TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
    if (focusedTextBox == null)
        return;

    BindingExpression textBindingExpr = 
      focusedTextBox.GetBindingExpression(TextBox.TextProperty);
    if (textBindingExpr == null)
        return;

    textBindingExpr.UpdateSource();

Outras dicas

Se o desempenho permitir, você pode alterar o UpdateSourceTrigger desses elementos da caixa de texto para PropertyChanged ao invés de LostFocus.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top