Многострочный выпуск WPF текстовое поле


Я создаю многострочный TextBox с этой связью его работа лучше, но если я хочу установить TextBox счетчик текста

label1.Content = textBox1.Text.Length;

С вышеприведенной строкой работают нормально, но проблема в том, что когда я нажимаю enter в счетчике TextBox, он увеличит 2 символа в счетчике TextBox.

Как я могу выполнить эту задачу, пожалуйста, помогите мне.

Любая помощь ценится!

4 5

4 ответа:

Ответ Андрея Гордеева правильный (+1 для него), но не дает прямого решения вашей проблемы. Если вы проверите строку textBox1.Text с помощью отладчика, то увидите соответствующие символы \r\n. С другой стороны, если вы намереваетесь воздействовать на них напрямую (например, через .Replace), вы ничего не получите.

Таким образом, практический ответ на ваш вопрос таков: полагайтесь на Environment.NewLine. Пример кода:
label1.Content = textBox1.Text.Replace(Environment.NewLine, "").Length;

Если вам нужен только один символ на "Enter", то вы можете просто обработать событие PreviewKeyDown на TextBox и вставить следующий обработчик:

    private void Txt_OnPreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            var txtBox = e.Source as TextBox;
            var selectionStart = txtBox.SelectionStart;
            txtBox.Text = txtBox.Text.Insert(selectionStart, "\n");
            txtBox.Select(selectionStart + 1, 0);
            e.Handled = true;  
        }
    }

Это потому, что новая строка представлена двумя символами: \r и \n

Связанный Вопрос: в чем разница между \r и \n?

Используйте приведенный ниже код вместо label1.Content = textBox1.Text.Length;

label1.Text = textBox1.Text.Replace(Environment.NewLine, "").Length.ToString();

Пожалуйста, не забудьте добавить using System.Text;