#c# #wpf #text #textbox #height
Вопрос:
У меня есть текстовое поле внутри пользовательского элемента управления слева, которое заполняется текстом из текстового поля справа. Идея заключается в том, что любой текст, который я набираю справа, виден слева, а пользовательский элемент управления изменяется по высоте в зависимости от того, сколько текста написано:
Код, который я использую, таков:
argTextBox.Measure(new Size(argTextBox.ActualWidth, Double.PositiveInfinity));
var tempNewSize = new Size(argTextBox.DesiredSize.Width, argTextBox.DesiredSize.Height);
В котором поле argTextBox равно текстовому полю слева. Каким-то образом высота от tempNewSize уже составляет 47,96 пикселей с одной строкой. С двумя строками я получаю равное количество дополнительного места:
Интересно понять, что после того, как я закончил текст слова во второй строке, на символе » x » я уже получаю третью строку по высоте, хотя x все еще визуально располагается на второй строке.
Что я делаю не так? В правом текстовом поле нет лишних строк, я также проверил строки во время выполнения, чтобы увидеть, были ли в строке лишние строки.
Правка: Похоже, что метод измерения также учитывает погрешность в своих расчетах. Мой более поздний код добавил дополнительную маржу:
var tempTextHeight = tempSize.Height;
var tempMargin = 15;
this.Height = tempMargin * 2 tempTextHeight;
Удаляя поля, проблема лишних пробелов решается, но слишком скоро не начинается новая строка.
Ответ №1:
Решение для получения новой строки слишком рано заключается в следующем:
При использовании метода измерения маржа не учитывается при расчете, поэтому ее необходимо добавить дополнительно:
argTextBox.Measure(new Size(argTextBox.ActualWidth (argTextBox.Margin.Left argTextBox.Margin.Right), Double.PositiveInfinity));