New to Telerik UI for WPF? Download free 30-day trial

Highlight Behavior

With the Q2 2014 release version of UI for WPF, RadAutoCompleteBox provides a brand new HighlightBehavior feature. Now it is possible to choose which item of the filtered items by the RadAutoCompleteBox to be highlighted depending on a custom logic.

Implementing Custom HighlightBehavior

The following example will demonstrate how to implement a custom HighlightBehavior that will always highlight the last matching item unless the entered text completely matches an item from the ItemsSource of RadAutoCompleteBox. The ItemsSource should contain items of type Item with a Name property used as a DisplayMemberPath.

Firstly you would need to create a custom class that inherits from the default HighlightBehavior of RadAutoCompleteBox:

Creation of custom class

public class MyHighlightBehavior : HighlightBehavior 
{ 
} 

Next thing you have to do is to override the FindHighlightedIndex() method of the behavior and implement the needed custom logic. For this scenario you will need to return the index of the last item of the filtered items if there isn't exact match:

Overriding FindHighlightedIndex

public override int FindHighlightedIndex(string searchText, System.Collections.IList filteredItems, IEnumerable<object> escapedItems, string textSearchPath, TextSearchMode textSearchMode) 
{ 
    var items = filteredItems.OfType<Item>().ToList<Item>(); 
    if (items != null) 
    { 
        if (items.Any(x => x.Name == searchText)) 
        { 
            // there is an exact match 
            var matchedItem = items.First(x => x.Name == searchText); 
            // return the index of the matched item 
            return items.IndexOf(matchedItem); 
        } 
    } 
    // there isn't exact match 
    // return the index of the last item from the filtered items  
    return items.Count - 1; 
} 

If you don't want to highlight any of the filtered items you should return -1 in the FindHighlightedIndex() method.

If the returned index from the FindHighlightedIndex() method goes out of range - no item will be highlighted (the index of the highlighted item will be set to -1).

After the behavior is implemented you have to set it as HighlightBehavior of RadAutoCompleteBox as shown below:

Setting the newly created behavior

<telerik:RadAutoCompleteBox ItemsSource="{Binding Items}" 
                            DisplayMemberPath="Name" 
                            HighlightBehavior="{StaticResource MyHighlightBehavior}" /> 

The following figures demonstrate the final result:

Figure 1: When there isn't exact match the last filtered item is highlighted.

radautocompletebox-features-highlightbehavior-2

Figure 2: When there is exact match the matched item is highlighted.

radautocompletebox-features-highlightbehavior-3