我使用TextBlockFormatter突出显示DataGridTemplateColumn -〉TextBlock中的文本的特定部分
DataGridTemplateColumn
<DataGridTemplateColumn Width="2.5*" Header="{DynamicResource TEXT}" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock base:TextBlockFormatter.FormattedText="{Binding prettyText}" TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
TextBlockFormatter:
public class TextBlockFormatter
{
public static readonly DependencyProperty FormattedTextProperty = DependencyProperty.RegisterAttached(
"FormattedText",
typeof(string),
typeof(RequestTextBlockFormatter),
new FrameworkPropertyMetadata(null, OnFormattedTextChanged));
public static void SetFormattedText(UIElement element, string value)
{
element.SetValue(FormattedTextProperty, value);
}
private static void OnFormattedTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBlock textblock = (TextBlock)d;
//textblock.Inlines.Clear();
List<SplitText> splitTexts = TranslationActions.getSplitetTextFromString(e.NewValue.ToString());
Color textColor = SomeColor;
foreach (SplitText splitText in splitTexts)
{
FontWeight fontWeight = Convert.ToBoolean(splitText.isBold) ? FontWeights.Bold : FontWeights.Normal;
FontStyle fontStyle = splitText.isItalic ? FontStyles.Italic : FontStyles.Normal;
if(splitText.isColor)
{
textblock.Inlines.Add(new Run(splitText.text){Foreground = new SolidColorBrush(textColor), FontWeight = fontWeight,FontStyle = fontStyle });
}
else
{
textblock.Inlines.Add(new Run(splitText.text){FontWeight = fontWeight,FontStyle = fontStyle });
}
}
}
}
在DataGrid中大约12行之后,TextBlock已经有了内联并开始重复数据。有没有一种方法可以防止这种情况,而不必每次都清除内联?
1条答案
按热度按时间evrscar21#
要么你必须每次都从头开始构建新的
Run
(通过清除textblock.Inlines
),要么你必须将新的格式化文本与旧的进行比较,只修改需要修改的内容--这是一项复杂得多的任务。