是否可以在Silverlight / WPF中为包装TextBlock选择颜色

时间:2010-03-12 21:02:24

标签: .net wpf silverlight xaml

例如,如果我有一个TextBlock:

“Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.Duis aute irure dolor in代表在velitate velit esse cillum dolore eu fugiat nulla pariatur。Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。“

我想要这个TextBlock的前10%,这样字体颜色应该是红色,其余颜色应该是绿色。

这或许意味着它会为“Lorem ipsum dolor sit amet,consectetur adipisici”以及“n”的一部分着色。基本上是像素方式字体着色而不是字符方式。

另一个重要的行为是百分比尊重包装,因为如果50%的TextBlock内容被着色,则应该表示阅读顺序中50%的文本是彩色的,而不是块的前半部分。 / p>

例如,这是一个类似的问题(正确答案),但关于没有包装的Label / TextBlocks: Is it possible to seletively color a label in Silverlight?

3 个答案:

答案 0 :(得分:4)

您可以使用“运行”来分隔文字。从这个意义上讲,您可以修改每次运行的背景,如此......

    <TextBlock>
        <Run Background="Red">
            Republican
        </Run>
        <Run Background="Blue">
            Democrat
        </Run>
    </TextBlock>

答案 1 :(得分: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>

如果文本是动态的,您需要编写代码将文本分区为两个运行(并将它们分配给TextBlock.Inlines集合),但是将它封装到自定义中应该不会太难控制。

答案 2 :(得分:2)

据我所知,此方案没有内置支持。在WPF中,我希望你必须编写自己的TextFormatter。在Silverlight中,您可能需要执行一些可怕的操作,例如渲染到内存中的位图,并使用图像处理来查找要更改的像素,然后在屏幕上绘制位图。 Eugh。