UWP — невозможно вставить текст в текущую позицию курсора

Я выполняю операцию копирования и вставки в многострочном текстовом поле. Метод вставки Работает хорошо в обычных случаях, но всякий раз, когда я нажимаю клавишу ввода (клавиша возврата), а затем вставляю содержимое буфера обмена, он просто добавляет текст, между текстом не создается пробел или новая строка.

Код позади:

private async void PasteButton_Click(object sender, RoutedEventArgs e)
{
    DataPackageView dataPackageView = Clipboard.GetContent();
    if (dataPackageView.Contains(StandardDataFormats.Text))
    {
        try
        {
            string TextCopied = await dataPackageView.GetTextAsync();
            var selectionIndex = MainTextBox.SelectionStart;
            MainTextBox.Text = MainTextBox.Text.Insert(selectionIndex, TextCopied);
            MainTextBox.SelectionStart = selectionIndex + TextCopied.Length;
            MainTextBox.Focus(FocusState.Pointer);
        }
        catch (Exception ex)
        {
            MessageDialog md = new MessageDialog(ex.Message);
            await md.ShowAsync();
        }
    }
}  

XAML: <TextBox Name="MainTextBox" AcceptsReturn="True" Padding="5,5,15,5" BorderThickness="0" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" TextChanged="MainTextBox_TextChanged"/>

Например: то, что я пытаюсь достичь, это: текст первой строки.

вторая строка текста

Я получаю следующее: Текст первой строки. Текст второй строки.


uwp
person rajini raja    schedule 12.11.2015    source источник
comment
Можете ли вы привести минимальный пример текста, который вы пытаетесь вставить, результат, который вы ожидаете увидеть, и результат, который вы видите на самом деле?   -  person Igor Ralic    schedule 12.11.2015
comment
Пожалуйста, добавьте это к своему вопросу, потому что форматирование не будет работать в комментарии.   -  person Igor Ralic    schedule 12.11.2015
comment
Рассмотрим этот шаг: Образец текста. и дважды нажмите Enter Keys и нажмите кнопку вставки (содержимое-второй образец текста). Я ожидаю как: Образец текста.\n\nВторой образец текста. Но то, что я получаю, это: образец Text.Second Sample Text.   -  person rajini raja    schedule 12.11.2015
comment
Вам нужно принять во внимание новые строки - пожалуйста, проверьте этот вопрос и, что более важно, ответ - он отлично работает! stackoverflow.com/questions/33312843/   -  person Igor Ralic    schedule 12.11.2015


Ответы (1)


Проблема, с которой я тоже сталкиваюсь.

Конечно, SelectionStart — это позиция каретки в текстовом поле. Но TextBox обрабатывает '\r\n' как единое целое, строковый тип обрабатывает его как два отдельных символа.

Итак, если вы хотите использовать substring(), вы должны найти истинный индекс по заданному SelectionStart.

person forehalo    schedule 29.02.2016