2014-09-17 2 views
1

У меня есть строка текста, которую мне нужно отобразить. Я сейчас показываю его в текстовом поле.Управление разметкой WPF

Мои требования изменились, и теперь мне нужно отобразить части этой строки в красном.

Я посмотрел и все, что я могу видеть для отображения текста в нескольких цветах, - это WebBrowser или RichTextbox. Оба они более сложны, чем я надеялся использовать.

Я могу форматировать текстовую строку любым способом (используя любую разметку).

Есть ли какой-то простой контроль над разметкой для wpf? (Примечание. Это будет вестись с datagrid, который может иметь много сотен строк, поэтому он не может быть интенсивным управлением памятью/обработкой.)

+0

Как вы знаете, какая часть текста должна быть красного цвета? Является ли это положением или фильтром? –

+0

Я собирался вставить какой-то разделитель или разметку. Я думаю, что я просто использую синтаксис TextBlock . – Vaccano

ответ

2

Вы можете использовать TextBlock, если его не нужно редактировать.

Сверху ссылке:

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

TextBlock не оптимизирован для сценариев, которые должны отображать более нескольких строк содержимого; для таких сценариев FlowDocument в сочетании с соответствующим контролем просмотра является лучшим выбором, чем TextBlock, с точки зрения производительности. После TextBlock FlowDocumentScrollViewer является следующим легким весом для отображения содержимого потока и просто предоставляет область прокрутки с минимальным пользовательским интерфейсом. FlowDocumentPageViewer оптимизирован вокруг режима просмотра «по-разному» для потока. Наконец, FlowDocumentReader поддерживает самые богатые функциональные возможности для просмотра содержимого потока, но, соответственно, имеет более тяжелый вес.

Модифицированный пример из ссылки, показывая красный текст:

<Grid> 
    <TextBlock TextWrapping="Wrap" > 
     <Bold>TextBlock</Bold> is designed to be <Italic>lightweight</Italic> 
       and is geared <Run Foreground="Red">specifically</Run> at integrating 
       <Italic>small</Italic> portions of flow content into a UI. 

    </TextBlock> 
</Grid> 

enter image description here

+1

Perfect. Благодаря! – Vaccano

0

AvalonEdit должен делать то, что вы хотите. Для него есть пакет Nuget. Смотрите здесь также:

http://www.codeproject.com/Articles/42490/Using-AvalonEdit-WPF-Text-Editor

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

+0

Я думаю, что AvalonEdit сделает это. Но я думаю, что это слишком тяжелый контроль за тем, что мне нужно. Как я уже сказал в своем вопросе, это будет идти по datagrid, который может иметь много сотен строк, поэтому он не может быть интенсивным управлением памятью/обработкой – Vaccano

Смежные вопросы