Я хотел бы отобразить вид расширенного текста в (только для чтения) DataGrid.Он должен включать базовые стили (полужирный, курсив) и гиперссылки, то есть ячейка сетки должна принимать что-то вроде:
<a>Here</a> and <a>also here</a> you can find <b>stuff<b>
и отображать его так, как если бы он был html.Конечно, данные поступают из базы данных, поэтому все должно быть привязано.
После попытки исправить соответствующий шаблон или стиль я отказался и попытался создать пользовательский элемент управления.Управление было довольно простым:
public class SmartTextBlock : TextBlock
{
public static readonly DependencyProperty HtmlProperty = DependencyProperty.Register("Html", typeof(string), typeof(SmartTextBlock), new UIPropertyMetadata(null, new PropertyChangedCallback(OnHtmlChanged)));
public string Html
{
get { return GetValue(HtmlProperty) as string; }
set { SetValue(HtmlProperty, value); }
}
static void OnHtmlChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) {
SmartTextBlock control = target as SmartTextBlock;
control.createParts(e.NewValue as string);
}
void createParts(string text) {
Inlines.Clear();
/* parse text and add some Inlines */
}
}
Все прошло хорошо, и управление хорошо отображается.Он был плавно добавлен в сетку как:
<DataGridTemplateColumn Width="*" Header="Line">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<controls:SmartTextBlock Html="{Binding Path=Html}" TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Проблема в том, что я пытаюсь изменить размер или прокрутить сетку.Затем все окно начинает мигать и приложение зависает!Это происходит не каждый раз, но если вы попытаетесь достаточно долго, это начнется наверняка.
Есть идеи, что может быть причиной этого, какую очевидную ошибку я упускаю из виду?