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, по крайней мере, я думаю, что это сложнее, чем это.