#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