我正在尝试使用WindowsCommunityToolkit中的TextBoxMask,但是我有一些奇怪的行为。 XAML代码:
<TextBox extensions:TextBoxMask.Mask="99/99/9999"
Text="{Binding PatientItem.StringBirthDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
PatientItemViewModel代码:
private string _StringBirthDate;
public string StringBirthDate
{
get { return _StringBirthDate; }
set
{
DateTime birthDateValue;
if (!String.IsNullOrEmpty(value) && DateTime.TryParse(value, out birthDateValue))
{
this.CalculateAgeValue(birthDateValue);
this.BirthDate = birthDateValue;
SetProperty(ref _StringBirthDate, value);
}
}
}
当我从空输入开始时,我没有问题。 当我打开页面以编辑数据时出现问题:PatientItem.StringBirthDate设置为“ 18/02/1952”值。
当我显示我的页面时,一切似乎都很好:
但是,如果单击叉号以清理文本框,或者如果我使用退格键键盘触摸,则只会消失最后一个字母,在那一刻之后,如果我在键盘上点按任何内容,就会出现一些奇怪的行为(数字未替换,光标不会移动前进,等等...)
您有任何想法来改进我的代码吗? 遮罩使用的文字绑定是否存在已知问题?
似乎TextBoxMask调用set方法的值很奇怪:
答案 0 :(得分:1)
如果在文本框中使用“ TextBoxMask”扩展名,则为默认行为。 TextBoxMask将处理您的TextBox的TextChanging事件。请参阅source code,您会知道原因。当您点击“ x”按钮时,它将触发TextChanging事件。
在这里,我建议您可以使用 Backspace 删除文本,而不是单击“ x”按钮。关于“ x”按钮,您无法通过为文本框应用自定义样式来显示它。请参见TextBoxMask XAML Property文档,该文档还为文本框设置了自定义样式。
<Style x:Key="MaskedTextBoxStyle"
TargetType="TextBox">
<Setter Property="Margin" Value="10,0,10,0" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="TextWrapping" Value="Wrap" />
</Style>