如何实现Entry与CheckBox的反向值绑定以控制密码显示?
实现Entry密码框与“显示密码”复选框的反向绑定效果
你当前的代码逻辑是把Entry的IsPassword直接绑定到CheckBox的IsChecked,导致效果和需求完全相反:CheckBox未勾选时IsChecked为false,IsPassword也为false(显示明文);勾选后IsChecked为true,IsPassword也为true(显示密码点)。要实现反向效果,有两种简单方案:
方法一:使用绑定表达式逻辑非(.NET MAUI 7+ 适用)
直接在绑定中对IsChecked取反,无需额外代码:
<Entry Placeholder="Enter Password" Grid.Row="3" TextColor="White" x:Name="vwPasswrd" IsPassword="{Binding !IsChecked, Source={x:Reference chkVwPasswdShow}}" Margin="20,0,0,0"/> <HorizontalStackLayout Grid.Row="3" Grid.Column="1" HorizontalOptions="Center"> <CheckBox x:Name="chkVwPasswdShow" VerticalOptions="Center"/> <Label Text="Show Password" FontSize="Micro" VerticalOptions="Center" TextColor="White"/> </HorizontalStackLayout>
这里通过!IsChecked反转布尔值,实现:
- 复选框未勾选时,
!IsChecked为true,IsPassword生效(显示密码点) - 复选框勾选时,
!IsChecked为false,IsPassword失效(显示明文)
方法二:使用布尔反转转换器(兼容所有版本)
如果项目版本不支持绑定表达式逻辑非,可创建通用反转转换器:
- 编写转换器类:
public class InverseBooleanConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return value is bool boolValue ? !boolValue : value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value is bool boolValue ? !boolValue : value; } }
- 在页面资源字典中注册转换器(替换
YourAppNamespace为你的项目命名空间):
<ContentPage.Resources> <local:InverseBooleanConverter x:Key="InverseBooleanConverter"/> </ContentPage.Resources>
页面根元素需添加命名空间声明:
xmlns:local="clr-namespace:YourAppNamespace"
- 修改Entry的绑定:
<Entry Placeholder="Enter Password" Grid.Row="3" TextColor="White" x:Name="vwPasswrd" IsPassword="{Binding IsChecked, Source={x:Reference chkVwPasswdShow}, Converter={StaticResource InverseBooleanConverter}}" Margin="20,0,0,0"/>
内容的提问来源于stack exchange,提问作者user22995906
相关产品推荐
相关产品推荐

