2010-02-06 8 views
6

Tengo un WPF Textbox, que quiero comprobar que el valor del texto sea correcto antes de permitir que pierda el teclado/foco.Detener que un cuadro de texto WPF pierda el foco

He intentado configurar e.Handled en los eventos InputBox_LostFocus & InputBox_LostKeyboardFocus, pero parece que no está logrando lo que quiero.

¿Alguna sugerencia sobre cómo puedo bloquear el foco en un Textbox?

+5

Enfoque de bloqueo hace una experiencia de usuario realmente odiosa. Antes de dedicar un gran esfuerzo a tratar de descubrir cómo hacerlo, rediseñaba la interfaz de usuario para que funcionara de manera diferente, por ejemplo, deshabilitaba cualquier otro control en la ventana hasta que 'TextBox' tuviera contenido válido. –

+0

@Robert: a menos que esté diseñando una aplicación de caja registradora, entonces es prácticamente obligatorio. En una aplicación de registro, ingresa un número o texto, LUEGO decida cuál es esa entrada, presionando un botón. (por ejemplo, número, SKU, número, cantidad, número, clave de pago, etc.) – HiredMind

Respuesta

4

Puede llamar al Mouse.Capture en un UIElement. Esto le dará cada evento de mouse que se abre ya sea en el elemento o no. pero es difícil de usar. Puede capturar el mouse en su cuadro de texto y registrarse para eventos de captura perdidos, cuando pierde la captura, puede recapturar. tienes que tener cuidado con comportamientos extraños. En general, es una mala práctica (creo) que no permita que un usuario salga de un campo. lo que es mejor es permitir que hagan lo que quieran, pero desactivar el botón que empujan después de la introducción de datos hasta que todos los campos son válidos (o algo similar)

Éstos son algunos enlaces

other SO question

msdn sample code

el cuadro combinado utiliza la captura del ratón para saber si el usuario ha hecho clic en otra parte de la aplicación para cerrar el cuadro combinado si es abierta si hace clic en otro control (o fuera de la ventana)

No sé si esta técnica le impedirá tabular el elemento. hay dos tipos de enfoque en una aplicación wpf. Tienes enfoque lógico y enfoque de teclado. Múltiples elementos pueden tener un enfoque lógico a la vez (cada uno dentro de un alcance de enfoque). piense, por ejemplo, que un cuadro de texto puede tener un enfoque lógico mientras hace clic en un menú (que también tiene un enfoque lógico). El enfoque del teclado solo puede estar en un lugar a la vez. Harás mucho trabajo por ti mismo. Lo consideraría seriamente si estás haciendo tu interacción de la manera correcta. Podría pasar días haciendo que esta interacción sea correcta. Si detiene la pérdida de foco de su cuadro de texto, ¿qué sucede si el usuario hace clic en el botón de cerrar?

aquí está el msdn article on focus

+0

Gracias Aran, este es un buen consejo. Tal vez voy a ver la funcionalidad para ser diferente. –

7

La mejor manera de hacer esto es para controlar el evento PreviewLostKeyboardFocus que se dispara mientras que el evento esté dirigiendo hacia abajo a su cuadro de texto. Establezca handle en true y nada más recibirá la notificación (lo que significa que el foco no se transferirá fuera de su cuadro de texto). Espero que esto ayude.

+0

Funcionó como un encanto para mí. Tan sencillo ! –

Cuestiones relacionadas