Вместо того, чтобы идти ко всем этим неприятностям, я предлагаю вам просто добавить метку справа от текстового поля и поставить% в качестве текста метки.
Однако, если вы действительно хотите go для путь TextChanged, то вам нужно проверить, заканчивается ли ваш ввод% char, и добавить его, только если нет. Также вам нужно установить позицию, в которой должен быть напечатан следующий символ.
if (skipTextChange)
skipTextChange = false;
else
{
skipTextChange = true;
if (PercentageText.Text == "")
{
PercentageText.Text = " ";
}
if (!PercentageText.Text.EndsWith("%"))
{
PercentageText.Text = "" + PercentageText.Text.Trim() + "%";
PercentageText.SelectionStart = PercentageText.TextLength - 1;
}
}
Рассмотрите возможность тщательного тестирования с этим подходом. Поведение Copy / Paste, Delete и BackSpace должно быть проверено и вставка нескольких пробелов или в случае% char, набираемого непосредственно пользователем. Конечно, если предполагается, что это текстовое поле содержит только цифры, требуется более сложный проверочный код. Если это контекст, то я предлагаю использовать элемент управления NUmericUpDown и трюк с меткой справа.