Saltar al contenido

¿Es posible especificar el teclado numérico de entrada de formularios de Xamarin sin coma o separador de punto decimal?

Te recomendamos que revises esta solución en un entorno controlado antes de enviarlo a producción, saludos.

Solución:

para restringir el Entry para aceptar solo números, puede usar un Comportamiento o un Desencadenador.

Ambos reaccionarán cuando un usuario escriba en ellos. Entonces, para su uso, puede hacer que el activador o el comportamiento busquen caracteres que no sean números y los eliminen.

Algo como esto para un comportamiento (tenga en cuenta que escribí todo esto en SO y no intenté compilarlo, avíseme si no funciona):

using System.Linq;
using Xamarin.Forms;

namespace MyApp 

    public class NumericValidationBehavior : Behavior 

        protected override void OnAttachedTo(Entry entry) 
            entry.TextChanged += OnEntryTextChanged;
            base.OnAttachedTo(entry);
        

        protected override void OnDetachingFrom(Entry entry) 
            entry.TextChanged -= OnEntryTextChanged;
            base.OnDetachingFrom(entry);
        

        private static void OnEntryTextChanged(object sender, TextChangedEventArgs args) 
        

            if(!string.IsNullOrWhiteSpace(args.NewTextValue)) 
             
                 bool isValid = args.NewTextValue.ToCharArray().All(x=>char.IsDigit(x)); //Make sure all characters are numbers

                ((Entry)sender).Text = isValid ? args.NewTextValue : args.NewTextValue.Remove(args.NewTextValue.Length - 1);
            
        


    

Luego en tu XAML:

 

  
    
      
    
  


Para mí, la solución simple es simplemente agregar un identificador TextChanged a la entrada (este es un código específico de la interfaz de usuario, por lo que no rompe MVVM)

   

Luego, en el código detrás

    private void OnTextChanged(object sender, TextChangedEventArgs e)
    
        //lets the Entry be empty
        if ( string.IsNullOrEmpty(e.NewTextValue) ) return;

        if ( !double.TryParse(e.NewTextValue, out double value) )
        
            ((Entry) sender).Text = e.OldTextValue;
        
    

Cambie en int. Parse si necesita un número entero

Yo también estaba enfrentando esto, pero la mejor manera de implementar esto es a través de comportamientos, aquí hay un artículo que le muestra en detalle cómo implementar esto y aún más, como limitar el valor del número ingresado a un valor dado que establece en su XAML.

Te mostramos comentarios y valoraciones

Recuerda que puedes dar recomendación a esta reseña si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *