2010-12-18 8 views
2

Ich versuche, Text in einer Databound-List-Box zu markieren, und markieren Sie Strings genau wie die E-Mail-Anwendung auf Windows Phone 7.Hervorhebungen Text in WP7 Databound Listbox

Die Suchtaste nach oben zieht einen Popup, und auf dem Textchanged-Ereignisse passend , Filtere ich aus einer Master-Liste und setze den DataContext neu:

private void txtSearch_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    results = allContent.Where(
    x => x.Content.Contains(txtSearch.Text) 
).ToList(); 

    DataContext = results; 
} 

Dieser Teil funktioniert gut. Das Problem besteht darin, den übereinstimmenden Text hervorzuheben. Ich habe versucht, über die ListBoxItems in verschiedenen Ereignissen (Loaded, ItemsChanged) zu iterieren, aber sie sind immer leer.

Irgendwelche Ideen darüber, wie Texthervorhebung in einem datengebundenen TextBox von ListItem gemacht werden könnte? Hier

Antwort

2

ist die Lösung, die ich ging mit:

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); 
} 
Verwandte Themen