Quiero agregar un comportamiento simple (al menos pensé que lo era) a mi WPF TextBox
.
Cuando el usuario presiona Escape, quiero que el TextBox
que está editando tenga el texto que tenía cuando el usuario comenzó a editar, Y quiero quitar el foco del TextBox
.
No tengo ningún problema para configurar el texto por el valor que tenía al comienzo de la edición.
El problema es quitar el foco del elemento. No quiero mover el enfoque a ningún otro componente, solo quiero TextBox
perder el enfoque. ¿Tendré que tener un elemento invisible para establecer el enfoque para que TextBox
pueda perder el enfoque?
Keyboard.ClearFocus()
desde el código subyacente después de hacer clic en alguna parte.ClearFocus
haceGotFocus
que no se dispare para el control enfocado recientemente mientras aún dispara para otros controles. Ese es un gran problema para mi teclado en pantalla personalizado, por ejemplo. Hace que el símbolo de intercalación desaparezca, que es probablemente todo lo que implica el "enfoque del teclado". Quizás estoy más interesado en algo como "enfoque del mouse".other.Focus()
.GotFocus
evento). Siempre hay algo con un enfoque lógico en su programa. Utilice elLostKeyboardFocus
evento o cambie el enfoque a otro elemento (que cambia el enfoque lógico junto con él) antes de borrar el enfoque del teclado.El código que he estado usando:
fuente
Un poco tarde para la fiesta, pero me ayudó, así que aquí va.
Desde .Net 3.0,
FrameworkElement
tiene una función MoveFocus que me sirvió.fuente
Dado que ninguna de las respuestas anteriores funcionó para mí y la respuesta aceptada funciona solo para un enfoque de teclado, llegué al siguiente enfoque:
Mata tanto el enfoque lógico como el del teclado.
fuente
Puede establecer el enfoque en un antepasado enfocable. Este código funcionará incluso si el cuadro de texto está dentro de una plantilla sin antepasados enfocables dentro de esa misma plantilla:
fuente
AFAIK, no es posible eliminar completamente el enfoque. Algo en su ventana siempre tendrá el foco.
fuente
En Windows Phone Development, acabo de hacerlo
Focus()
othis.Focus()
en PhoneApplicationPage y funcionó a las mil maravillas .fuente
Para mí, es bastante complicado, especialmente cuando se usa con el enlace LostFocus. Sin embargo, mi solución es agregar una etiqueta vacía y concentrarme en ella.
...
fuente
Mi respuesta no aborda directamente la pregunta anterior, sin embargo, creo que su redacción ha hecho que se convierta en "La pregunta" sobre cómo deshacerse del enfoque mediante programación. Un escenario común donde esto es necesario es que el usuario pueda despejar el enfoque al hacer clic con el botón izquierdo en el fondo de un control raíz, como una ventana.
Entonces, para lograr esto, puede crear un comportamiento adjunto que cambiará el enfoque a un control creado dinámicamente (en mi caso, una etiqueta vacía). Es preferible usar este comportamiento en los elementos de más alto nivel como ventanas, ya que recorre sus elementos secundarios para encontrar un panel al que pueda agregar una etiqueta ficticia.
fuente