Syncfusion SfRichTextBoxAdv - Репликация функциональности WPF TextRange?

Я пытаюсь позволить пользователю делать выборки в SfRichTextBoxAdv и сохранять эти выборки (текстовые диапазоны) в коллекцию. Дело в том, что я также хочу, чтобы текстовые диапазоны обновляли свои начальные / конечные позиции при добавлении или удалении текста перед ними. То есть: если текст добавляется перед текстовым диапазоном и продвигает его вперед, то начальный / конечный индексы должны быть соответственно увеличены.

В обычном WPF RichTextBox я смог сделать это с помощью TextRange. С помощью TextRange я могу сохранить выделенный текст как переменную TextRange. Затем, если какой-либо текст добавляется перед TextRange и продвигает его вперед в документе, свойства начала и конца TextPointer соответственно изменяются.

С SfRichTextBoxAdv, когда я сохраняю выделенный текст как переменную SelectionAdv, переменная обновляется каждый раз, когда курсор перемещается в документе в текущее местоположение курсора (текущий выбор). Поэтому я даже не могу сохранить выделение в переменной, потому что оно постоянно меняется по мере перемещения курсора в документе. Я попытался сохранить выделение, используя две переменные TextPosition:

var start = richTextBoxAdv.Selection.Start;
var end = richTextBoxAdv.Selection.End;

Но они по-прежнему обновляются, когда курсор перемещается так же, как SelectionAdv.

1 ответ

Спасибо за использование продуктов Syncfusion.

В элементе управления SfRichTextBoxAdv свойства "Start" и "End" для "SelectionAdv" обозначают текущую позицию курсора. Следовательно, он будет обновляться автоматически при каждом перемещении курсора. Тем не менее, вы можете сохранить текущую позицию текста, используя свойство GetHierarchicalIndex класса TextPosition, которое будет возвращать строку. Позже вы можете получить текстовую позицию, используя сохраненный иерархический индекс, используя метод GetTextPosition(stringierarchicalIndex) класса "DocumentAdv". Пожалуйста, обратитесь к нашей справочной документации класса по следующей ссылке.

http://help.syncfusion.com/cr/cref_files/wpf/sfrichtextboxadv/Syncfusion.SfRichTextBoxAdv.WPF~Syncfusion.Windows.Controls.RichTextBoxAdv.SelectionAdv~Start.html http://help.syncfusion.com/cr/cref_files/wpf/sfrichtextboxadv/Syncfusion.SfRichTextBoxAdv.WPF~Syncfusion.Windows.Controls.RichTextBoxAdv.SelectionAdv~End.html http://help.syncfusion.com/cr/cref_files/wpxtich.fS Окна HTML

Мы подготовили простой пример, чтобы продемонстрировать сохранение выбора одним нажатием кнопки и метод получения позиции текста из иерархического индекса.

Пример кода (C#):

List<SelectionRangeExt> selectionRanges = new List<SelectionRangeExt>(); 
private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    SelectionRangeExt range = new SelectionRangeExt(); 
    range.Start = richTextBoxAdv.Selection.Start.GetHierarchicalIndex; 
    range.End = richTextBoxAdv.Selection.End.GetHierarchicalIndex; 
    selectionRanges.Add(range); 
} 

public TextPosition GetTextPoistion(string hierarchicalIndex) 
{ 
    if (hierarchicalIndex == null) 
        return null; 
    return richTextBoxAdv.Document.GetTextPosition(hierarchicalIndex); 
} 

Пример ссылки: Sample.zip.

Иерархический индекс позиции текста является статическим значением, и он не будет обновляться при добавлении или изменении текста перед позицией текста.

Для дальнейших запросов, пожалуйста, свяжитесь с нашей службой поддержки по следующей ссылке, https://www.syncfusion.com/support/directtrac

С уважением, Venkatesan.

Другие вопросы по тегам