Действительно ли это возможно к цвету seletively переносящийся TextBlock в Silverlight/WPF

Например, если у меня есть 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?

5
задан Community 23 May 2017 в 12:13
поделиться

3 ответа

Я не верю, что это возможно по пикселям (по крайней мере, без измерения текста и использования одной из техник из связанного вопроса построчно). Это можно сделать посимвольно, используя объект 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), но это не должно быть слишком сложно инкапсулировать это в настраиваемый элемент управления.

3
ответ дан 14 December 2019 в 01:06
поделиться

Насколько мне известно, для этого сценария нет встроенной поддержки. В WPF я ожидаю, что вам придется написать свой собственный TextFormatter. В Silverlight вам, возможно, придется сделать что-то ужасное, например отрисовать растровое изображение в памяти и использовать манипуляции с изображением, чтобы найти пиксели, которые нужно изменить, а затем нарисовать растровое изображение на экране. Эх.

2
ответ дан 14 December 2019 в 01:06
поделиться

Вы можете использовать Runs, чтобы разделить ваш текст. В этом смысле вы можете изменять фон каждого прогона, например так ...

    <TextBlock>
        <Run Background="Red">
            Republican
        </Run>
        <Run Background="Blue">
            Democrat
        </Run>
    </TextBlock>
4
ответ дан 14 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: