是的,使用转换器(实际上它甚至可能是多转换器)和 TextBlock 的 Inlines 集合是正确的。因此,假设您正在将搜索项(在您的情况下为“Emi”)传递给转换器。您还需要以某种方式使用生成的文本来操作 TextBlock。为简单起见,我们假设 TextBlock 的 Tag 属性(不是 Text)包含正在搜索的整个字符串(单词“Eminem”)。
class HighlightPartOfTextConverter : IValueConverter {
public object Convert(object value/*this is TextBlock*/, Type type, object parameter/*this is 'Emi'*/, CultureInfo ci){
var textBlock = value as TextBlock;
string str = textBlock.Tag as string;
string searchThis = parameter as string;
int index = str.IndexOf(searchThis);
if(index >= 0){
string before = str.Substring(0, index);
string after = str.Substring(index + searchThis.Length);
textBlock.Inlines.Clear();
textBlock.Inlines.Add(new Run(){Text=before});
textBlock.Inlines.Add(new Run(){Text=searchThis, FontWeight = FontWeights.Bold});
textBlock.Inlines.Add(new Run(){Text=after});
}
return "";
}
public object ConvertBack(...) {...}
}