对于静态内容的选择性着色,以下建议可以正常工作: Is it possible to seletively color a wrapping TextBlock in Silverlight/WPF
但是我的内容将在运行时生成。 对于前者如果生成的内容是:“快速布朗狐狸” 然后我需要他们串起“Brown”为棕色,“Fox”为红色
关键字 - 颜色列表是固定的,在运行时可供我使用。
我已经查看了MSDN上的Advanced TextFormatting页面,但它对我来说太复杂了,那里的示例也没有编译:(
我正在寻找创建一个可以为我做这个的自定义控件。让我知道是否有人知道如何解决这个问题。
提前致谢。
答案 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);
}
}