Выборочная раскраска динамического содержимого TextBlock в WPF - PullRequest
1 голос
/ 27 апреля 2010

Для выборочной раскраски статического содержимого хорошо работает следующее предложение: Возможно ли выборочно окрашивать обертку TextBlock в Silverlight / WPF

Однако мой контент будет создан во время выполнения.Напримересли сгенерированное содержимое: «Быстрая коричневая лиса», тогда мне нужно, чтобы строка «Коричневый» была цвета Браун, а «Лиса» - красного цвета

Список ключевых слов и цветов фиксирован и доступен дляя во время выполнения.

Я посмотрел страницу Advanced TextFormatting на MSDN, но она слишком сложна для меня, и пример там не компилируется: (

Я смотрю на созданиепользовательский элемент управления, который может сделать это для меня. Дайте мне знать, если кто-нибудь есть какие-либо идеи относительно того, как это сделать.

Заранее спасибо.

1 Ответ

3 голосов
/ 27 апреля 2010

Идея объясняется в вашей ссылке: есть свойство для текста в пользовательском элементе управления Затем отсканируйте текст на наличие слов и создайте соответствующие прогоны. В конце концов, присвойте их всем встроенным коллекциям 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);
    }
}
...