Как правильно использовать WindowsCommunityToolkit TextBoxMask? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь использовать TextBoxMask из WindowsCommunityToolkit, но у меня странное поведение. Код 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

Но если нажать на крестик, чтобы очистить текстовое поле, или если я использую прикосновение к клавише Backspace, исчезнет только последняя буква, и после этого момента, если я коснусь чего-нибудь на клавиатуре, появятся странные символы (число не заменено, курсор не перемещается) вперед и т.д ...)

enter image description here

Есть ли у вас идеи улучшить мой код? Известна ли проблема с привязкой текста, используемой с маской?

РЕДАКТИРОВАТЬ: видео, чтобы показать более подробно мою проблему: enter image description here

Кажется, что TextBoxMask вызывает метод set со странными значениями:

enter image description here

1 Ответ

0 голосов
/ 10 января 2019

Это поведение по умолчанию, если вы используете расширение TextBoxMask в вашем текстовом поле. TextBoxMask будет обрабатывать событие TextChanging вашего TextBox. Посмотрите исходный код , вы бы знали причину. Когда вы нажимаете кнопку «x», она вызывает событие TextChanging.

Здесь я предположил, что вы можете использовать Backspace , чтобы удалить свой текст вместо нажатия кнопки «x». Что касается кнопки 'x', вы не сможете отобразить ее, применив свой собственный стиль для текстового поля. См. Документ Свойство TextBoxMask XAML , также он создает собственный стиль для текстового поля.

<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>
...