Выделение текста в списке данных WP7 - PullRequest
2 голосов
/ 18 декабря 2010

Я пытаюсь выделить текст в 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), но они всегда пусты.

Есть идеи о том, как можно сделать подсветку текста в дочернем элементе TextBox с привязкой к данным ListItem?

1 Ответ

2 голосов
/ 19 декабря 2010

Вот решение, которое я выбрал:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...