Например, если у меня есть TextBlock:
"Печаль Lorem ipsum находится, сережка, consectetur adipisicing элита, sed делает характер eiusmod incididunt единое время labore и dolore Magna aliqua. Единое время enim мельчайшая частица рекламы veniam, quis nostrud exercitation ullamco laboris nisi единое время aliquip исключая EA commodo consequat. Duis aute irure печаль в reprehenderit в voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat не proident, sunt в culpa qui officia deserunt mollit anim то есть laborum".
Я хочу первые 10% этого TextBlock, такого, что цвет шрифта должен быть красным, и остальные должны быть зелеными.
Это, возможно, означает, что окрасило бы, "печаль Lorem ipsum находятся сережка, consectetur adipisici", и часть "n". В основном мудрый пикселем шрифт, окрашивающий вместо символьно-мудрого.
Другое важное поведение состоит в том, что процент уважает обертывание, в том, что, если 50% содержания TextBlock окрашены, это должно означать, что 50% текста в чтении порядка окрашены, а не первая половина блока.
Например, это - подобный вопрос (с корректными ответами), но относительно Label/TextBlocks без обертывания: действительно ли это возможно к цвету seletively маркировка в Silverlight?
Я не верю, что это возможно по пикселям (по крайней мере, без измерения текста и использования одной из техник из связанного вопроса построчно). Это можно сделать посимвольно, используя объект Run:
<TextBlock FontSize="24" TextWrapping="Wrap">
<Run Foreground="Red">Lorem ipsum dolor sit amet, consectetur</Run>
adipisicing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam...
</TextBlock>
Если текст является динамическим, вам нужно будет написать код для разделения текста на два Run (и назначить их коллекции TextBlock.Inlines), но это не должно быть слишком сложно инкапсулировать это в настраиваемый элемент управления.
Насколько мне известно, для этого сценария нет встроенной поддержки. В WPF я ожидаю, что вам придется написать свой собственный TextFormatter. В Silverlight вам, возможно, придется сделать что-то ужасное, например отрисовать растровое изображение в памяти и использовать манипуляции с изображением, чтобы найти пиксели, которые нужно изменить, а затем нарисовать растровое изображение на экране. Эх.
Вы можете использовать Runs, чтобы разделить ваш текст. В этом смысле вы можете изменять фон каждого прогона, например так ...
<TextBlock>
<Run Background="Red">
Republican
</Run>
<Run Background="Blue">
Democrat
</Run>
</TextBlock>