Еще один подход, чтобы попробовать. Используйте TextBlock.Inlines . Затем привяжите вашу модель к TextBlock, и либо в пользовательском конвертере значений , либо через пользовательское присоединенное свойство выполните синтаксический анализ вашей модели, чтобы заполнить строки TextBlock.
Вот пример свойства Attached, которое принимает текстовую строку и выделяет каждое второе слово жирным шрифтом:
public class RunExtender : DependencyObject
{
public static string GetText(DependencyObject obj)
{
return (string)obj.GetValue(TextProperty);
}
public static void SetText(DependencyObject obj, string value)
{
obj.SetValue(TextProperty, value);
}
public static readonly DependencyProperty TextProperty = DependencyProperty.RegisterAttached("Text", typeof(string), typeof(RunExtender), new PropertyMetadata(string.Empty, OnBindingTextChanged));
private static void OnBindingTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var bindingText = e.NewValue as string;
var text = d as TextBlock;
if (text != null)
{
text.Inlines.Clear();
var words = bindingText.Split(' ');
for (int i = 0; i < words.Length; i++)
{
var word = words[i];
var inline = new Run() {Text = word + ' '};
if (i%2 == 0)
{
inline.FontWeight = FontWeights.Bold;
}
text.Inlines.Add(inline);
}
}
}
}
Это не код качества продукции, он взят из демонстрации Silverlight, но вы поняли.
Надеюсь, это поможет.
Приветствия, Анвака.