Вы можете отформатировать число, которое будет иметь запятые после каждых 3 цифр, как описано здесь .Один из способов - перехватить событие TextChanged
, преобразовать текущий номер в число, разделенное запятыми, и заменить текущий текст номером, разделенным запятыми.
Кроме того, чтобы прекратить исключение ovetflow, необходимо отписаться отTextChanged
событие, а затем снова подпишитесь.
Общий обработчик событий здесь:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
/// unsubscribe, so that the replacing doesn't invoke this handler again
textBox.TextChanged -= TextBox_TextChanged;
if(double.TryParse(textBox.Text, out double value))
{
textBox.Text = value.ToString("N0");
}
/// put the cursor in the end of the text
textBox.Select(textBox.Text.Length, 0);
/// subscribe again
textBox.TextChanged += TextBox_TextChanged;
}
Надеюсь, что поможет.
Редактировать: Чтобы разрешить только числовые значения, подключите событие PreviewKeyDown
, разрешите только числовые ключи.например:
private void TextBox_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
bool proceed =
(e.Key >= Windows.System.VirtualKey.Number0 && e.Key <= Windows.System.VirtualKey.Number9) ||
(e.Key >= Windows.System.VirtualKey.NumberPad0 && e.Key <= Windows.System.VirtualKey.NumberPad9);
e.Handled = !proceed;
}
И наконец, чтобы разрешить более 3 запятых, я отредактировал код, теперь он должен разрешать более 3 запятых (в основном, я заменил int
на double
),