Дублирование содержимого UWP RichEditBox добавляет дополнительные строки - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь получить и установить форматированный текст в; RichEditBox, но каждый раз, когда я выполняю GetText, а затем SetText, добавляется один дополнительный возврат каретки.Вот супер простой пример с кнопкой, которая получает затем установить.Попробуйте, чтобы один дополнительный возврат каретки добавлялся при каждом выполнении Get-Set.

XAML

<StackPanel>
    <Button Content="Get-Set" Click="OnGetSet"/>
    <RichEditBox x:Name="RichEditor" Width="300" Height="200"/>
</StackPanel>

C #

private void OnGetSet(object sender, RoutedEventArgs e)
{
    RichEditor.Document.GetText(TextGetOptions.FormatRtf, out value);
    RichEditor.Document.SetText(TextSetOptions.FormatRtf, value);
} 

Я пробовал все сортировкиопций как в SetText, так и в GetText, но я могу предотвратить вставку дополнительного возврата каретки.У кого-нибудь есть предложение?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Тем временем я нашел другой обходной путь, но ваш гораздо менее хакерский :-).Я просто удаляю последнюю добавленную новую строку:

RichEditor.Document.GetText(TextGetOptions.FormatRtf, out var value);
var lastNewLine = value.LastIndexOf("\\par", StringComparison.Ordinal);
value = value.Remove(lastNewLine, "\\par".Length);
RichEditor.Document.SetText(TextSetOptions.FormatRtf, value);            

Но это зависит от "неправильного" поведения RichEditBox, поэтому ваше решение намного лучше.

0 голосов
/ 07 октября 2018

В итоге я нашел разумный обходной путь.Я получаю весь диапазон текста, а затем вызываю GetText для диапазона вместо документа.

Я не уверен, является ли это лучшим решением, но оно отлично работает.

ОбновленоC #

private void OnGetSet(object sender, RoutedEventArgs e)
{
    var value = GetText(RichEditor);
    RichEditor.Document.SetText(TextSetOptions.FormatRtf, value);
}

public string GetText(RichEditBox editor)
{
    // get the actual size of the text
    editor.Document.GetText(TextGetOptions.UseLf, out string text);

    // get the text in the total range - to avoid getting extra lines
    var range = editor.Document.GetRange(0, text.Length);
    range.GetText(TextGetOptions.FormatRtf, out string value);

    // return the value
    return value;
}
...