Saltar al contenido

Cómo crear un evento de clic en la etiqueta en formularios xamarin dinámicamente

Esta es la respuesta más exacta que te podemos dar, sin embargo estúdiala pausadamente y valora si es compatible a tu proyecto.

Solución:

Para las personas que prefieren usar XAML y les gusta vincular Command directamente a ViewModel, pueden usar esto:


Y luego, en su ViewModel, solo asignará el comando a su función:

public ICommand ForgotPasswordCommand => new Command(OnForgotPassword);

Y luego defina la función con todo el trabajo hecho:

private async void OnForgotPassword()
 ... 

PD: tendrás que declarar que eres using System.Windows.Input;

Prueba esto :

        var forgetPasswordLabel = new Label   // Your Forget Password Label
        
            Text = "Forgot Password?",
            FontSize = 20,
            TextColor = Color.Blue,
            HorizontalOptions = LayoutOptions.Center,
        ;


        // Your label tap event
        var forgetPassword_tap = new TapGestureRecognizer();   
        forgetPassword_tap.Tapped += (s,e) =>
        
            //
            //  Do your work here.
            //
        ;
        forgetPasswordLabel.GestureRecognizers.Add(forgetPassword_tap);

Muestra :

        var forgetPasswordLabel = new Label   // Your Forget Password Label
        
            Text = "Forgot Password?",
            FontSize = 20,
            TextColor = Color.Blue,
            HorizontalOptions = LayoutOptions.Center,
        ;

        MainPage = new ContentPage
        
            BackgroundImage = "background.png",
            Content = new StackLayout
            
                VerticalOptions = LayoutOptions.CenterAndExpand,
                HorizontalOptions = LayoutOptions.CenterAndExpand,
                Spacing = 50,
                Children = 

                    new Label 
                        //HorizontalTextAlignment = TextAlignment.Center,
                        Text = "Welcome, Please Sign in!",
                        FontSize=50,
                        TextColor=Color.Gray,
                    ,


                    new Entry
                    
                        Placeholder="Username",
                        VerticalOptions = LayoutOptions.Center,
                        Keyboard = Keyboard.Text,
                        HorizontalOptions = LayoutOptions.Center,
                        WidthRequest = 350,
                        HeightRequest = 50,
                        FontSize=20,
                        TextColor=Color.Gray,
                        PlaceholderColor=Color.Gray,
                    ,

                    new Entry
                    
                        Placeholder="Password",
                        VerticalOptions = LayoutOptions.Center,

                        Keyboard = Keyboard.Text,
                        HorizontalOptions = LayoutOptions.Center,
                        WidthRequest = 350,
                        HeightRequest = 50,
                        FontSize=25,
                        TextColor=Color.Gray,
                        IsPassword=true,
                        PlaceholderColor =Color.Gray,
                    ,
                    new Button
                    
                        Text="Login",
                        FontSize=Device.GetNamedSize(NamedSize.Large,typeof(Button)),
                        HorizontalOptions=LayoutOptions.Center,
                        VerticalOptions=LayoutOptions.Fill,
                        WidthRequest=350,
                        TextColor=Color.Silver,
                        BackgroundColor=Color.Red,
                        BorderColor=Color.Red,
                    ,
                    forgetPasswordLabel
                
            
        ;

        var forgetPassword_tap = new TapGestureRecognizer();
        forgetPassword_tap.Tapped += (s,e) =>
        
            //
            //  Do your work here.
            //
        ;
        forgetPasswordLabel.GestureRecognizers.Add(forgetPassword_tap);

Si hay varios lugares con etiquetas en las que se puede hacer clic, tiene sentido crear un control heredado de Xamarin. Forms Label y NO COLOCAR TapGestureRecognizer en todos los lugares donde se requiere la etiqueta.

public class ExtendedLabel : Label

    private event EventHandler click;

    public string Name
    
        get; set;
    

    public void DoClick()
    
        click?.Invoke(this, null);
    

    public event EventHandler Clicked
    
        add
        
            lock (this)
            
                click += value;

                var g = new TapGestureRecognizer();

                g.Tapped += (s, e) => click?.Invoke(s, e);

                GestureRecognizers.Add(g);
            
        
        remove
        
            lock (this)
            
                click -= value;

                GestureRecognizers.Clear();
            
        
    
    

En su archivo XAML, importa el espacio de nombres donde se define el control, por ejemplo

Y úsalo como control ordinario:


valoraciones y comentarios

¡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 *