我正在公司内部处理应用程序,他们需要某种用户身份验证。我的代码完全适用于身份验证,但有一些视觉错误。
我知道我的代码会将Password
保留在内存中并且不是应该这样做的,但由于这是公司内部的,因此黑客攻击没有任何好处。我想听听有人有更好的解决方案。这可能是不可能的,因为在PasswordBox
内的UserControl
里面使用了UserControl
。这必须一直向上发送数据,我不知道如何做到这一点。
现在,回到主题。我前一段时间创建了一个WatermarkTextBox
,代码如下所示。下面的代码就像它应该的那样。
<TextBlock Text="{Binding Path=Watermark, RelativeSource={RelativeSource AncestorType=UserControl},
FallbackValue='This prompt dissappears as you type...'}"
Visibility="{Binding ElementName=txtUserEntry, Path=Text.IsEmpty,
Converter={StaticResource BooleanToVisibilityConverter}}" />
<TextBox Name="txtUserEntry"
Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource AncestorType=UserControl}}" />
现在我为PasswordWatermarkBox
使用了类似的代码。
<TextBlock Text="{Binding Path=Watermark, RelativeSource={RelativeSource AncestorType=UserControl},
FallbackValue='This prompt dissappears as you type...'}"
Visibility="{Binding ElementName=txtUserEntry, Path=Password.IsEmpty,
Converter={StaticResource BooleanToVisibilityConverter}}" />
<PasswordBox Name="txtUserEntry"
local:PasswordHelper.Attach="True"
local:PasswordHelper.Password="{Binding Path=Text,
UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource AncestorType=UserControl},
Mode=TwoWay}" />
在这里,我可以使用Text
DP从附加属性local:PasswordHelper.Password
获取纯文本密码。这里的问题是Watermark
没有更新。在第一个示例中检查Text.IsEmpty
有效,但此处并非如此。 Password.IsEmpty
也不起作用,local:PasswordHelper.Password.IsEmpty
也不起作用。