Как выделить текст в текстовом поле в Windows Phone 7 - PullRequest
0 голосов
/ 04 марта 2012

В проекте Windows Phone у меня есть следующий сценарий:

  1. Пользователь вводит текст в текстовое поле
  2. Пользователь нажимает кнопку, которая отключает текстовое поле и запускает процесс
  3. Некоторая обработка текста выполнена, и на каждом этапе обработки я хочу выделить определенную часть текста в текстовом поле (сам текст не изменяется).
  4. Текстовое полевключен после завершения обработки.

Какой правильный способ сделать это?

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

Вот код, который я использую, который не работает: XAML

<TextBox Name="txtTest" AcceptsReturn="True" Height="250" TextWrapping="Wrap" SelectionBackground="Red"></TextBox>
<Button Name="btnTest" Width="200" Click="btnTest_Click">Test</Button>

Код позади

private void btnTest_Click(object sender, RoutedEventArgs e)
{
    txtTest.Select(1, 1);
    //on this line SelectedText has the correct value
}

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

Так, как правильно реализовать эту функцию?

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Если у вас есть один экземпляр для выделения, вы можете использовать свойства SelectionStart и SelectionLength.

Если вам нужно выделить несколько экземпляров, вы можете заменить TextBox на RichTextBox и указатьподчеркивает, стилизовав его соответствующим образом.Это не позволит вам отображать подсветку в режиме редактирования.

Если вам нужно включить подсветку текста во время редактирования, вам нужно создать собственную замену / альтернативу TextBox.

0 голосов
/ 05 марта 2012

После исследования я обнаружил, что метод Select в TextBox обеспечивает визуальную индикацию, только если TextBox имеет фокус.TextBox не может иметь фокус, когда он не отключен, поэтому он был бесполезен для меня.RitchTextBox предназначен только для чтения, а API для выбора частей текста более сложен, чем решение, которое я использовал.

Я использовал TextBlock со следующим кодом для выделения текста:

private void SetTextBlock(TextBlock textBlock, string text, int selectedIndex)
{
    textBlock.Inlines.Clear();
    Run previous = new Run();
    previous.Text = text.Substring(0, selectedIndex);
    Run current = new Run();
    current.Text = text.Substring(selectedIndex, 1);
    current.Foreground = new SolidColorBrush(Colors.Green);
    current.FontWeight = FontWeights.ExtraBold;
    Run next = new Run();
    next.Text = text.Substring(selectedIndex + 1, text.Length - selectedIndex - 1);
    textBlock.Inlines.Add(previous);
    textBlock.Inlines.Add(current);
    textBlock.Inlines.Add(next);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...