Выделение текста в Silverlight (цвет фона желтый)

#silverlight #richtextbox

#silverlight #richtextbox

Вопрос:

Мне нужно выделить текст в текстовом блоке Silverlight или RichTextBox. Я попытался просто добавить теги к текстовому прогону RTB, но они просто отображаются в тексте, например:

 Some <Bold>text</Bold> in a RTB
  

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

 myRTB.Selection.Select(textPtr1, textPtr2);
  

но это выделяется стандартным синим цветом. Мне нужно сделать цвет фона желтым, но, похоже, я могу изменить только цвет переднего плана прогона. Почему это так, и есть идеи для меня?

Обновить:

Я пытался использовать только текстовый блок с преобразователем значений, который добавляет такой прогон:

 return String.Format("<Run Foreground="Red">{0}</Run>", value.ToString());
  

но все же текстовый блок просто показывает теги, а не форматированный текст.

Комментарии:

1. Если я не ошибаюсь: <Выполнить FontWeight=»Bold»>ваш текст</Run>

2. Добавление любых тегов xml к тексту, к которому привязан RTB, просто приводит к отображению тегов в тексте в RTB.

3. Все еще ищу решение для программного выделения текста в Silverlight. Есть желающие?

4. Извините за опоздание… Если вы добавляете текст в код, вы можете добавить это «Runs» в свойство «Inlines» для текстового блока.

5. Я попытался добавить прогон через конвертер привязки — см. Выше. Однако это не работает — теги просто отображаются буквально. Я посмотрю на свойство InLines .

Ответ №1:

Мне нужно выделить текст в текстовом блоке Silverlight

Вы можете обернуть textBlock рамкой и изменить цвет рамки на mouseEnter и mouseLeave .

XAML:

  <Border x:Name="myTxtBorder" MouseEnter="myTxtBorder_MouseEnter" MouseLeave="myTxtBorder_MouseLeave">
        <TextBlock Text="Hover me and yellow you'll see!"/>
  </Border>
  

Код, лежащий в основе:

 Private Sub myTxtBorder_MouseEnter(sender As System.Object, e As System.Windows.Input.MouseEventArgs)
        myTxtBorder.Background = New SolidColorBrush(Colors.Yellow)
    End Sub

    Private Sub myTxtBorder_MouseLeave(sender As System.Object, e As System.Windows.Input.MouseEventArgs)
        myTxtBorder.Background = New SolidColorBrush(Colors.White)
    End Sub
  

Комментарии:

1. Мне нужно только выделить определенные слова, поэтому мне нужно будет добавить границу к этим конкретным словам на лету во время выполнения. Как я могу это сделать?

2. @Graeme: используя подход border, вам нужно будет выделить слова, которые вы хотите выделить, в отдельный текстовый блок и обернуть его рамкой. Если у вас много текста, в итоге у вас будет много элементов управления, что не очень хорошо. Сколько текста вы обрабатываете?

3. Текстовый блок находится в списке, и каждый из них будет содержать пару сотен слов. В списке может быть 20 элементов, в каждом из которых 2 или 3 вхождения слова в hightlight.

Ответ №2:

Жидкость.RichTextBox может вам помочь.

http://vectorlight.net/silverlight/controls/rich_textbox.aspx