Установка ширины и высоты WPF RichTextBox в соответствии с размером моноширинного шрифта
-
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 в зависимости от ваших требований ...