在WP7数据绑定列表框中突出显示文本

时间:2010-12-18 16:53:13

标签: wpf windows-phone-7

我正在尝试突出显示数据绑定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中完成文本突出显示的任何想法?

1 个答案:

答案 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);
}