我正在尝试突出显示数据绑定ListBox中的文本,并突出显示与Windows Phone 7上的电子邮件应用程序完全相同的匹配字符串。
搜索按钮拉出弹出窗口,在TextChanged事件中,我从主列表中过滤并重新设置DataContext:
private void txtSearch_TextChanged(object sender, TextChangedEventArgs e)
{
results = allContent.Where(
x => x.Content.Contains(txtSearch.Text)
).ToList();
DataContext = results;
}
那部分效果很好。问题是突出显示匹配的文本。我尝试在各种事件中迭代ListBoxItems(Loaded,ItemsChanged),但它们总是空的。
关于如何在数据绑定ListItem的子TextBox中完成文本突出显示的任何想法?
答案 0 :(得分:2)
以下是我采用的解决方案:
private void ResultsText_Loaded(object sender, RoutedEventArgs e)
{
var textBlock = sender as TextBlock;
if (txtSearch.Text.Length > 0 && textBlock.Text.Length > 0)
{
BoldText(ref textBlock, txtSearch.Text, Color.FromArgb(255, 254, 247, 71));
}
}
public static void BoldText(ref TextBlock tb, string partToBold, Color color)
{
string Text = tb.Text;
tb.Inlines.Clear();
Run r = new Run();
r.Text = Text.Substring(0, Text.IndexOf(partToBold));
tb.Inlines.Add(r);
r = new Run();
r.Text = partToBold;
r.FontWeight = FontWeights.Bold;
r.Foreground = new SolidColorBrush(color);
tb.Inlines.Add(r);
r = new Run();
r.Text = Text.Substring(Text.IndexOf(partToBold) + partToBold.Length, Text.Length - (Text.IndexOf(partToBold) + partToBold.Length));
tb.Inlines.Add(r);
}