如何正确使用WindowsCommunityToolkit TextBoxMask?

时间:2019-01-09 21:10:51

标签: uwp uwp-xaml windows-community-toolkit

我正在尝试使用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”值。

当我显示我的页面时,一切似乎都很好:

enter image description here

但是,如果单击叉号以清理文本框,或者如果我使用退格键键盘触摸,则只会消失最后一个字母,在那一刻之后,如果我在键盘上点按任何内容,就会出现一些奇怪的行为(数字未替换,光标不会移动前进,等等...)

enter image description here

您有任何想法来改进我的代码吗? 遮罩使用的文字绑定是否存在已知问题?

编辑:视频更明确地显示我的问题: enter image description here

似乎TextBoxMask调用set方法的值很奇怪:

enter image description here

1 个答案:

答案 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>