Текст правильно выбран в соответствии с заданным диапазоном.
Неправильное размещение 5 знаков справа.
rtfcontrol.Appen(initialtext, true);
rtfcontrol.Append(sometext, true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length - sometext.Length, rtfcontrol.Text.Length -1);
rtfcontrol.SelectionForeground = Colors.Blue;
rtfcontrol.Append("\n", true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length);
WPF:
GTK2 (Linux):
Xamarin.Mac:
В Windows символы окончания строки почему-то не учитываются в индексах выбора. В настоящее время я использую следующий код в качестве обходного пути:
private void Write(string message, Color c)
{
Append(message + Environment.NewLine, true);
int idx = -1, last = -1;
if (Environment.OSVersion.Platform == PlatformID.Unix)
{
idx = Text.LastIndexOf(message);
last = Text.Length;
}
else
{
var lines = string.Join("", Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
idx = lines.LastIndexOf(message);
last = lines.Length;
}
if (idx == -1)
return;
Selection = new Range<int>(idx, idx + message.Length);
SelectionForeground = c;
Selection = new Range<int>(last, last);
}
Но это определенно ошибка ...
Да, раньше я использовал тот же хак, что и @ManuelHu , это
Благодарим за сообщение о проблеме!
Привет @DanWBR ,
Это должно быть исправлено в последней ветке разработки. Не могли бы вы попробовать? На всех платформах новые строки теперь обрабатываются как один символ \n
.
Привет, @cwensley , осталось исправить еще один символ:
Привет @DanWBR , у тебя есть репродукция по одному выпуску? Кажется, я не могу воспроизвести это.
Может я использую неправильные индексы? Тем не менее, он работает в macOS и GTK.
@DanWBR , да, к сожалению, это не будет работать так, как у вас - WPF добавляет новую строку в конце свойства Text
(независимо от того, есть он в вашем тексте или нет). На данный момент я не нашел способа обойти это, но это отдельная проблема.
Я бы рекомендовал сохранить текущую позицию в переменной и увеличивать ее после добавления текста. Доступ к свойству Text
каждый раз только для получения длины будет замедляться по мере увеличения текста.
Самый полезный комментарий
@DanWBR , да, к сожалению, это не будет работать так, как у вас - WPF добавляет новую строку в конце свойства
Text
(независимо от того, есть он в вашем тексте или нет). На данный момент я не нашел способа обойти это, но это отдельная проблема.Я бы рекомендовал сохранить текущую позицию в переменной и увеличивать ее после добавления текста. Доступ к свойству
Text
каждый раз только для получения длины будет замедляться по мере увеличения текста.