Установка ширины и высоты WPF RichTextBox в соответствии с размером моноширинного шрифта

StackOverflow https://stackoverflow.com/questions/2569191

  •  24-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь приспособить WPF RichTextBox для точного размещения сетки символов в конкретном моноширинном шрифте.В настоящее время я использую FormattedText для определения ширины и высоты моего RichTextBox, но измерения, которые он предоставляет мне, слишком малы - в частности, ширина двух символов слишком мала.

Есть ли лучший способ выполнить эту задачу?Это не кажется подходящим способом определения размера моего элемента управления.

родовое слово
Это было полезно?

Решение

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

Для свойства Document.PagePadding по умолчанию установлено значение {5,0,5,0}. Поэтому вам придется прибавить 10 к ширине.

Кроме того, код RichTextBox имеет код BorderThickness, по умолчанию значение которого равно {1, 1, 1, 1}. Поэтому вам придется прибавить 2 к ширине.

Итак, код, который вы хотите, может выглядеть так:

родовое слово

Если вы сделаете это, вы все равно будете отклоняться на 1 символ, но это немного вводит в заблуждение. Код RichTextBox будет переноситься, даже если текст имеет ширину совсем немного, а не целую ширину символа. Если добавить 2 к ширине, все получится. Я не могу точно понять, откуда берутся эти лишние 2. Я никогда не пытался добиться такой точности ширины. Я и раньше сталкивался с проблемами PagePadding и BorderThickness, но я просто не могу найти лишних 2. Это может быть просто константа, с которой вы застряли, но я сомневаюсь в этом. Это должно быть где-то.

Небольшой совет по созданию генерирующего кодового тега, который вы можете сделать

родовое слово

, чтобы очистить цикл.

Другие советы

Я нашел решение проблемы с высотой поля Rich text box. Я изменил его для общего использования.

Создайте в своем приложении следующие структуры ....

родовое слово

Создайте следующие частные переменные в своем классе для формы (там, где вам нужно вычислить высоту форматированного текста)

родовое слово

Добавьте следующий метод в свой класс для формы

родовое слово

Возможно, вам придется изменить вышеуказанный метод, чтобы он работал в соответствии с вашими требованиями ... Убедитесь, что вы отправили строку Rtf в качестве параметра методу, а не обычный текст, а также не забудьте присвоить доступную ширину и высоту переменной Richtextbox в методе ...

Вы можете поиграть с WordWrap в зависимости от ваших требований ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top