Member 11381933 Ответов: 1

Добавить тире, когда пользователь вводит ssn в текстовое поле.невозможно удалить дефисы с помощью кнопки delete\backbutton


Привет, у меня есть требование XAML для добавления тире, когда пользователь вводит ssn в текстовое поле. Я попробовал ниже код, умею добавлять тире, но не могу удалить тире из текстового поля. Всякий раз когда я пытаюсь удалить или использовать задний пробел дефисы не удаляются

Что я уже пробовал:

код XAML:
<Window x:Class="WpfApplication2.MainWindow"                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="MainWindow" Height="350" Width="525">
    <grid>
    <TextBox HorizontalAlignment="Left" Height="23"                    Margin="10,10,0,0"

    TextWrapping="Wrap" Name="Txtssn"

    Text=""

                                 MaxLength="11"

                                 VerticalAlignment="Top"

                                 Width="120"

                                 TextChanged="TextBox_TextChanged"/>

С#:
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication2
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            var textBox = sender as TextBox;

            string data = textBox.Text;

            if (data.Length == 3)
            {
                string formattedSSN = data.Insert(3, "-");
                Txtssn.Text = formattedSSN.ToString();
                textBox.Focus();
                textBox.SelectionStart = textBox.Text.Length;
            }
            else if (data.Length == 6)
            {
                string formattedSSN = data.Insert(6, "-");
                Txtssn.Text = formattedSSN.ToString();
                textBox.Focus();
                textBox.SelectionStart = textBox.Text.Length;
}}}

1 Ответов

Рейтинг:
2

Wendelius

Для того чтобы правильно добавить или удалить дефис вы должны обработать например UIElement.Событие KeyDown (System.Окна)[^] . В обработчике событий проверьте, добавляет ли пользователь текст или удаляет его (нажата клавиша backspace). Также необходимо учитывать, нажата ли клавиша delete и/или выделена ли область текста и положение курсора в тексте.

Есть довольно много примеров, таких как Как реализовать маску для текстового поля в W. P. F.[^Однако, возможно, самым простым способом было бы использовать готовый элемент управления из Расширенный инструментарий WPF™[^]