【问题标题】:Xamarin forms: Hide and show password feature is not working for entryXamarin 表单:隐藏和显示密码功能不适用于输入
【发布时间】:2021-07-04 06:48:04
【问题描述】:

我已经为入口组件实现了隐藏和显示密码功能。它最初不起作用,但经过一次隐藏和显示后,它开始工作。图标正在更改,但密码未显示。此问题仅在android平台上。

我的代码:

Xaml:

<StackLayout Padding="3" Orientation="Horizontal">

    <local:CustomEntry
        x:Name="password_entry"
        IsPassword="True"
        Placeholder="Password"
        Style="{StaticResource LoginEntryStyle}"/>

    <Image 
        x:Name="password_icon"
        Style="{StaticResource LoginEntryImageStyle}" 
        HorizontalOptions="End"
        Source="ic_hide_password_xx.png">
        <Image.GestureRecognizers>
            <TapGestureRecognizer
                Tapped="PasswordIcon_Clicked"
                NumberOfTapsRequired="1">
            </TapGestureRecognizer>
        </Image.GestureRecognizers>
    </Image>
</StackLayout>

Xaml.cs:

bool showPassword = true;
private void PasswordIcon_Clicked(object sender, EventArgs e)
{
    if (showPassword)
    {
        password_icon.Source = "ic_show_password_xx.png";
        password_entry.IsPassword = false;
        showPassword = false;
    }
    else
    {
        password_icon.Source = "ic_hide_password_xx.png";
        password_entry.IsPassword = true;
        showPassword = true;
    }
}

我尝试使用 password_entry.IsPassword 代替 bool 变量,但没有运气。我已经上传了一个示例项目here 供参考。

【问题讨论】:

  • 你为什么将showPassword布尔值初始化为true?
  • @FabriBertani 用于处理初始点击

标签: xamarin.forms


【解决方案1】:

这似乎是一个潜在的问题,你可以在 github 上提出它。

解决方法

 if (showPassword)
            {
                password_icon.Source = "ic_show_password_xx.png";
                password_entry.IsPassword = false;
                password_entry.IsPassword = true;
                password_entry.IsPassword = false;
                showPassword = false;
            }
            else
            {
                password_icon.Source = "ic_hide_password_xx.png";
                password_entry.IsPassword = true;
                showPassword = true;
            }

【讨论】:

    【解决方案2】:

    您可以使用触发器轻松完成此操作,只需检查条目的 IsPassword 属性

    <StackLayout Padding="3" Orientation="Horizontal">
        <local:CustomEntry
            x:Name="password_entry"
            IsPassword="True"
            Placeholder="Password"
            Style="{StaticResource LoginEntryStyle}"/>
        <Image
            Style="{StaticResource LoginEntryImageStyle}" 
            HorizontalOptions="End">
            <Image.Triggers>
                <DataTrigger
                    TargetType="Image"
                    Binding="{Binding Source={x:Reference password_entry}, Path=IsPassword}"
                    Value="True">
                    <Setter
                        Property="Source"
                        Value="ic_show_password_xx" />
                </DataTrigger>
                <DataTrigger
                    TargetType="Image"
                    Binding="{Binding Source={x:Reference password_entry}, Path=IsPassword}"
                    Value="False">
                    <Setter
                        Property="Source"
                        Value="ic_hide_password_xx" />
                </DataTrigger>
            </Image.Triggers>
            <Image.GestureRecognizers>
                <TapGestureRecognizer Tapped="PasswordIcon_Clicked" />
            </Image.GestureRecognizers>
        </Image>
    </StackLayout>
    

    在您的代码中,只需在手势识别器点击上将反向布尔值分配给条目 IsPassword 属性

    private void PasswordIcon_Clicked(object sender, EventArgs e)
    {
        password_entry.IsPassword = !password_entry.IsPassword;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多