UWP TextBox.SelectedText изменяется \ r \ n на \ r

Мне нужно получить персонажей, которыепредшествовал TextBox'sSelectedText, но я не могу заставить SelectionStart соответствовать свойствам TextBoxes Text, очевидно, потому что TextBox's SelectedText scrubbs\n ценности.

У меня есть приложение Windows 10 UWP. Я добавил два текстовых поля и одну кнопку, как показано ниже на XAML:

<StackPanel>
    <Rectangle Height="40"></Rectangle><!-- quicker than turning off debug numbers -->
    <TextBox Height="300" Name="textBox" AcceptsReturn="True" />
    <Button Click="Button_Click" Content="Selection" ></Button>
    <TextBox Height="100" Name="textBox2" AcceptsReturn="True" />
</StackPanel>

Я инициализировал страницу, поместив некоторый текст в первый TextBox.

    public MainPage()
    {
        this.InitializeComponent();
    }

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
            this.textBox.Text = @"Call me Ishmael. Some years ago--never mind how long precisely--having little
or no money in my purse, and nothing particular to interest me on shore, I
thought I would sail about a little and see the watery part of the world. It is
a way I have of driving off the spleen and regulating the circulation. Whenever
I find myself growing grim about the mouth; whenever it is a damp, drizzly
November in my soul; whenever I find myself involuntarily pausing before coffin
warehouses, and bringing up the rear of every funeral I meet; and especially
whenever my hypos get such an upper hand of me, that it requires a strong moral
principle to prevent me from deliberately stepping into the street, and
methodically knocking people's hats off--then, I account it high time to get to
sea as soon as I can.";
    }

Я ожидал, что что-то вроде следующего получит то, что выбрано (опять же, мне не нужен SelectedText; мне нужны предыдущие символы, но я хватаю то, что выбрано здесь, чтобы упростить отслеживание):

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        textBox2.Text = textBox.Text.Substring(textBox.SelectionStart,
            20 < textBox.SelectionLength ? 20 : textBox.SelectionLength);
    }

Это не так. Это странно, кажется, получитьSelectionStart на основе значения дляtextBox.Text это не включает\n, Вот что я имею в виду ...

Если я выделю первые две строки ...

Зовите меня Измаил. Несколько лет назад - не говоря уже о том, как долго - имея мало или совсем нет денег в моем кошельке и ничего особенного, чтобы заинтересовать меня на берегу, я

... все работает, и я получаю то, что ожидал ("Назови меня Измаил. Сом"). Но с каждым выпадающим списком у меня появляется еще один персонаж, чем я ожидал Таким образом, строки 2 и 3 дают новую строку вначале (\n за дополнительную плату):

Если мы перейдем к строкам 4 и 5 (то есть пропустим три строки), я получу три символа назад перед выбором.

То есть, выбирая это ...

У меня есть способ отогнать селезенку и регулировать кровообращение. Всякий раз, когда я становлюсь мрачным вокруг рта; всякий раз, когда это сыро

... дает это ...

с \ г \ п
как я знаю

(Примечание: я выделил то, чтобыло выбрано здесь вручную, просто чтобы помочь визуализировать происходящее.)

Если я проверюSelectedTextкаждый перевод строки сводится к\r, так что это почти имеет смысл, за исключением того, чтоtextBox.Text все еще имеет соответствующую платформу\r\nэто вместо!

То есть, если я поставлю точку останова вButton_Click событие и проверитьtextBox.SelectedText, Я получил...

"a way I have of driving off the spleen and regulating the circulation. Whenever\rI find myself growing grim about the mouth; whenever it is a damp, drizzly\r"

Увидеть\r только? ЕщеtextBox.Text дает ...

"Call me Ishmael. Some years ago--never mind how long precisely--having little\r\nor no money in my purse, and nothing particular to interest me on shore, I\r\n[...]"

Если я хочу получить то, что ожидаю, я могу сделать что-то глупое, как ...

    public static string NormalizeNewlineToCarriageReturn(this string str)
    {
        str = str.Replace("\r\n", "\r");
        str = str.Replace("\n", "\r");
        return str;
    }

А потом...

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        textBox2.Text = textBox.Text.NormalizeNewlineToCarriageReturn().Substring(textBox.SelectionStart,
            20 < textBox.SelectionLength ? 20 : textBox.SelectionLength);
    }

Но этопсих, И если TextBox когда-нибудь начнет работать так, как я ожидал, это сломается.

В чем дело? Я имею в виду, я вижу объяснения (какэто от мистера Скита) которые вроде бы замыкаются на "нужно использоватьNewLine«объяснить пропавшие\nЭто в TextBoxes, но в UWP, по крайней мере, я думаю, что это сложнее, чем это.

Ответы на вопрос(0)

Ваш ответ на вопрос