Estoy buscando una manera de implementar la InputScope de un cuadro de texto como se hace en Wp7, pero el uso clásico de WPF.

Lo que quiero lograr es que la entrada está restringida a sólo el uso de números decimales.
¿Cómo puedo lograr esto?

<TextBox Text="{Binding Amount, Mode=TwoWay}" InputScope="Number"/>

InputScope es un atributo válido para el clásico de WPF, pero lamentablemente no parece funcionar.

InformationsquelleAutor BitKFu | 2012-06-03

4 Comentarios

  1. 6

    InputScope no obliga a ningún tipo de validación o restricción en la entrada. Es una sugerencia para los procesadores de entrada (por ejemplo. los teclados en pantalla, reconocimiento de voz) de la clase de datos que se pueden introducir en un control.

    Este valor sólo se utiliza si un IME (como un teclado en pantalla) está activado.

    Incluso en WP7, InputScope no restringir los valores que se pueden introducir en un cuadro de texto. Usted todavía puede introducir caracteres no deseados si se podría instalar un procesador de entrada de la que se omiten InputScope.

    Si desea restringir la entrada de texto con caracteres específicos, usted tendrá que usar un MaskedTextBox o interceptar los eventos de pulsación de tecla. El código también será más fácil de entender.

    Puede ser posible el uso de InputManager del PreProcessInput evento para filtrar los eventos de entrada utilizando el InputScope pero probablemente no vale la pena el esfuerzo.

    • ¿Tiene usted alguna idea de cómo utilizar las PreProcessInput Controlador? Si usted tiene una solución para esto, me gustaría premio con el 50+
    • El problema no es cómo trabajar con PreProcessInput, es cómo filtrar la entrada utilizando el InputScope. No sé de una manera integrada de hacer eso. La respuesta en esta pregunta, social.msdn.microsoft.com/Forums/en-US/wpf/thread/… se muestra cómo crear un evento de Entrada de otro evento, pero aún no se puede filtrar los eventos resultantes.
    • usted podría marcar esto como una respuesta como esta respuesta fue de lo más útil.
  2. 1

    Hay no integrada en la manera de hacerlo.
    Tendrás que escribir un poco de código para lograr lo que estás buscando.
    Aquí es un ejemplo de lo que usted necesita hacer: WPF Maskable cuadro de texto para Valores Numéricos

    • Hola Alex. Gracias por el Enlace, pero esto no es lo que estoy buscando. Incluso si tengo que escribir algo de código, me gustaría usar el InputScope atributo que ya se define como un documento válido de WPF atributo para el cuadro de texto.
    • InputScope es una sugerencia para los procesadores de entrada como teclados en pantalla, no es una manera de restringir la entrada. Usted no puede impedir que los eventos de teclado usando InputScope
  3. 1

    No he utilizado InputScope, sin embargo, a partir de la documentación de MSDN (aquí, aquí, aquí y aquí) parece que WPF entrada del alcance requiere un proceso más complejo, de entrada, por ejemplo,

    xmlns:swi debe ser asignado a System.Windows.Input.

    <TextBox>
        <TextBox.InputScope>
            <swi:InputScope RegularExpression="^(0|(-(((0|[1-9]\d*)\.\d+)|([1-9]\d*))))$" />
        </TextBox.InputScope>
    </TextBox>

    (Regex cadena encontrado en Google, yo no lo he comprobado.)


    O tal vez:

    <TextBox>
        <TextBox.InputScope>
            <swi:InputScopePhrase>
                <swi:InputScopePhrase.Names>Number</swi:InputScopePhrase>
            </swi:InputScopePhrase>
        </TextBox.InputScope>
    </TextBox>
  4. 0
    string txt = MessageWrite.Text;
            if (txt != "")
            {
                MessageWrite.Text = Regex.Replace(MessageWrite.Text, "[^a-f ^0-9]", "");
                if (txt != MessageWrite.Text)
                {
                    MessageWrite.Select(MessageWrite.Text.Length, 0);
                }
            }

    messageWrite es un cuadro de texto nombre. Se restringe de a-F y 0-9. El usuario puede modificar 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here