WPF中动态TextBlock内容的选择性着色

时间:2010-04-27 06:11:05

标签: wpf text-formatting

对于静态内容的选择性着色,以下建议可以正常工作: Is it possible to seletively color a wrapping TextBlock in Silverlight/WPF

但是我的内容将在运行时生成。 对于前者如果生成的内容是:“快速布朗狐狸” 然后我需要他们串起“Brown”为棕色,“Fox”为红色

关键字 - 颜色列表是固定的,在运行时可供我使用。

我已经查看了MSDN上的Advanced TextFormatting页面,但它对我来说太复杂了,那里的示例也没有编译:(

我正在寻找创建一个可以为我做这个的自定义控件。让我知道是否有人知道如何解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您的链接中解释了这个想法:拥有自定义控件中文本的属性。然后扫描文本中的单词,并创建适当的运行。最后,将它们全部分配给TextBox内联集合。

在这个例子中,我只使用了string.Split()。如果它们被其他标点符号分开,您可能会错过单词。

Dictionary<string, Brush> colorDictionary;
string text;  // The value of your control's text property

string[] splitText = text.Split(' ', ',', ';', '-');
foreach (string word in splitText)
{
    if (string.IsNullOrEmpty(word))
    {
        continue;
    }

    Brush runColor;
    bool success = colorDictionary.TryGetValue(word, out runColor);
    if (success)
    {
        Run run = new Run(word);
        run.Background = runColor;
        textbox.Inlines.Add(run);
    }
    else
    {
        Run run = new Run(word);
        texbox.Inlines.Add(run);
    }
}