2014-02-04 2 views
0

Как говорится в названии, мне нужно настроить часть текста в WPF, например, у меня есть фраза «Быстрая коричневая лиса прыгает по ленивой собаке», мне нужно жирным шрифтом слово «коричневый» или изменить цвет фона/переднего плана «лиса». Насколько я знаю, ни один из обычных элементов управления WPF не поддерживает эту функциональность, есть ли альтернативы с открытым исходным кодом/бесплатно?Что лучше всего настроить связанный текст в WPF

P.S. контроль должен быть связующим

Спасибо.

ответ

1

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

<TextBlock> 
     <Run>The quick </Run> 
     <Run FontWeight="Bold" Background="Yellow">brown</Run> 
     <Run Foreground="Red"> fox </Run> 
     <Run>jumps over the lazy dog.</Run> 
    </TextBlock> 

Выход:

enter image description here

Кроме того, если вы используете WPF 4.0 и более поздних версий, Microsoft сделали Text свойство Run как свойства зависимостей вместо обычного CLR собственности. Таким образом, вы также можете связываться с ним.

Refer here для Bindable Run.

+0

Хм, могу ли я привязать текстовый блок к массиву строк (слов?), Чтобы сгенерировать столько кадров при необходимости? – Davita

+0

'Run' добавляется как' Inlines' в TextBlock, то есть вы можете сделать так: textBox.Inlines.Добавить (новый Run() {Text = "Brown"}); '. Но 'Inlines' не является DP, поэтому вы не можете связываться с ним. Тем не менее, вы можете использовать привязку конвертера и передачи строки строки там вместе с textBox, и там вы можете добавить строки в textBlock. Но в TextBlock нет встроенной поддержки. Или либо нужно подклассы TextBlock сказать «MyTextBlock» и выставить DP из него, и может поместить код добавления строк в изменение DP. –

+1

Спасибо, ваш ответ привел меня к решению. Я просто разделил текст на 3 части в виртуальной машине и привязал его к 3 забегам. Не чистое решение, но оно работает. – Davita

0

Вы можете использовать HTML для настройки текста .. Вы можете получить набор HTML-кодов here ...

+0

Знаете ли вы какой-либо элемент управления, который поддерживает html ..? – Davita

+0

'Textblock', который может поддерживать этот текст .. но не только' TextBox' .. – Sankarann

+0

TextBlock не поддерживает разметку HTML ... Вы путаете TextBlock в другом элементе управления ..? – Davita

1

Я в значительной степени зависит от того, что вы хотите достичь, но вы могли бы использовать RichTextBox из WPF Toolkit, как предложено here.

Или вы можете добавить возможность привязки к .Net RichTextBox, как предложено here.

Однако, если вам не требуется ничего сложного, как RichTextBox. Вы можете использовать ValueConverter и изменить текст, который вы собираетесь показать, чтобы он лучше соответствовал вашим потребностям. Нравится example.

Кроме того, в зависимости от того, что вам нужно, вы можете создать элемент управления пользователя с помощью свойства «Текст», а в PropertyChanged - разделить текст на более мелкие части и связать их в разных «вспомогательных свойствах» », который будет отображаться в разных текстовых блоках (с разными стилями) внутри вашего User Control.

Update (добавлено предложение от моего комментария)

Если RichTextBox не является решением проблемы, а UserControl либо, вы могли бы использовать ValueConverter для достижения этой цели с TextBlock.Inline, как here.

+0

У RichTextBox есть проблемы с символами Unicode. Он отображает? <- символы вместо символа unicode. Это происходит только тогда, когда данные получены из привязки. Кроме того, RichTextBox будет решением – Davita

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