¿Cómo puedo hacer un control de foco perder si el usuario hace clic en algo que no es enfocable?

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

  •  21-09-2019
  •  | 
  •  

Pregunta

Tengo una ItemsControl llena de docenas de artículos; cada elemento es un cuadro de texto dependiente y un par de botones. Porque quiero que el usuario sea capaz de pestaña del cuadro de texto a la caja de texto, los botones tienen conjunto enfocable en Falso. Esto funciona muy bien. El único problema es que, dado que el texto cajas no están perdiendo el enfoque, su unión no es la actualización de la fuente, por lo que el código detrás de los botones no está trabajando con los valores correctos.

No puedo pensar en una manera de solucionar este problema, por ejemplo, teniendo el controlador de clic de los botones de navegar a través del árbol lógico a su cuadro de texto y hacer es vinculante para actualizar el origen de forma explícita. Pero me parece que tiene que haber una manera mejor que eso, lo que probablemente sería obvio para mí si tuviera una mejor comprensión del modelo de enfoque. ¿Hay?

¿Fue útil?

Solución

Como rendimiento es un problema, es posible encontrar una artículo escrito por Josh Smith útil. El contexto es muy similar a su problema. resuelve josh ella por la activación de la actualización de enlace manualmente:

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

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

    textBindingExpr.UpdateSource();

Otros consejos

Si el rendimiento le puede cambiar el UpdateSourceTrigger de esos elementos de cuadro de texto a PropertyChanged en lugar de LostFocus.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top