C# WPF Корректный перенос текста
Хочу повторить функцию MonkeyType
с вводом текста, для этого создал textblock
(тут будет отображаться текст который нужно ввести), textbox
(сюда будут вводиться символы) и textblock
(тут будут отображаться вводимые символы, это нужно для изменения цвета символа при проверке). Проблема в том что при вводе в textbox
части слова оно не переносится(и я в целом понимаю почему) из-за чего ввод становится не совсем корректно выглядеть пока не ввести все слово, а мне бы хотелось исправить это. Ниже код и скрины.
Вот тут первый textblock
с текстом, а ниже textbox
и textblock
для отображения вводимого текста.(на счет стилей и того что даже с ними половина параметров написана вручную знаю, просто пока создаю концепт кода, отполирую позже)
<TextBlock Text="{Binding DisplayText}"
HorizontalAlignment="Left"
VerticalAlignment="Top"
TextWrapping="Wrap"
FontSize="32"
Style="{StaticResource defaultstyle}"/>
<TextBox
Style="{StaticResource inputtext}"
Text="{Binding InputText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="{Binding InputText}"
FontSize="32"
IsHitTestVisible="False"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Foreground="White"
TextWrapping="Wrap"
Style="{StaticResource defaultstyle}"/>
Вот скрин проблемы о которой я говорю, кусок слова остается сверху из-за чего ввод выглядит не правильно, если ввести полностью оно перенесется.
В итоге я пришел к тому что мне либо нужно убирать второй textblock
и менять цвет текста из первого textblock
, но как честно говоря я так и не придумал(были мысли через textrange
или как-то так оно называлось, но я пока не пробовал, хотя это в целом лучший вариант на данный момент).
Еще вариант при каждом вводе вызывать функцию для проверки если следующее слово больше среднего кол-ва символов в строке, то переносить текст пользователя путем добавления \n
(да, костыль, но этот вариант я хоть как-то еще могу представить себе), но и тут проблема с тем что я не могу придумать как мне узнать следующее слово ведь для этого либо нужно вести счет вводимых слов а это также тяжело для меня придумать, ведь если делать счет через пробелы, то человек может просто ввести 5 пробелов, а если делать путем счета длины строки и длины частей массива строк, то это как по мне не лучший вариант ведь там сначала нужно узнать по кол-ву символов сколько минимум слов человек уже написал и только после этого брать следующее слово.
На этом идеи кончились, поэтому хотел узнать тут какие есть варианты либо решения моей проблемы либо может кто-то подскажет просто лучший вариант для реализации этого? На счет RichTextBox
я пытался его использовать, но программа зависает на некоторое время при просто быстрее обычного ввода текста, из-за чего я не использовал его.