1
我有一個ItemsSource
綁定到我的數據。我有一個TextBox
,隨着用戶開始打字,我篩選基於以下Filter predicate
項目上textBoxText
更改事件:篩選wpf時ItemsSource高亮顯示?
ICollectionView listView = CollectionViewSource.GetDefaultView(myControl.ItemsSource);
listView.Filter = ((x) =>
{
MyData data = x as MyData;
return data.Name.Contains(searchString, System.StringComparison.InvariantCultureIgnoreCase);
});
能正常工作和篩選器列表。不過,我還希望這些項目在輸入時以黃色突出顯示輸入的搜索條件。我怎麼能在wpf中做到這一點? 有點像:
如果我搜索「EST」及產品Forest
森林項目亮點est
黃色或其他顏色的ListBox
?感謝您的任何建議。
public string HighlightSource
{
get { return (string)GetValue(HighlightSourceProperty); }
set { SetValue(HighlightSourceProperty, value); }
}
public static readonly DependencyProperty HighlightSourceProperty =
DependencyProperty.Register("HighlightSource", typeof(string), typeof(HighlightableTextBlock), new PropertyMetadata("", OnChange));
在OnChange
事件處理程序執行實際的高亮::
static void OnChange(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var textBlock = d as HighlightableTextBlock;
var text = textBlock.Text;
var source = textBlock.HighlightSource;
if (!string.IsNullOrWhiteSpace(source) && !string.IsNullOrWhiteSpace(text))
{
var index = text.IndexOf(source);
if (index >= 0)
{
var start = text.Substring(0, index);
var match = text.Substring(index, source.Length);
var end = text.Substring(index + source.Length);
textBlock.Inlines.Clear();
textBlock.Inlines.Add(new Run(start));
textBlock.Inlines.Add(new Run(match) { Foreground = Brushes.Red });
textBlock.Inlines.Add(new Run(end));
}
}
}
而且HighlightableTextBlock
從TextBlock
繼承並增加了以下依賴屬性 -
你也許模板項目以'TextBox'並綁定'SelectionStart'和'SelectionLength'屬性...我會希望看到一個解決的辦法。 – 2013-03-22 20:08:46
可能會查看這些鏈接http://underground.infovark.com/2011/03/03/highlighting-query-terms-in-a-wpf-textblock/ – isakavis 2013-03-22 20:29:46