user3632179
user3632179

Reputation: 27

How to disable the marking of first input

I created a editable ComboBox for searching(filtering) like Google. I am using the ActionHandler "KeyUp" and the first input is highlighted and overwritten. How can i disable the overwriting or highlighting?

private void CbInKuLi_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
    CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(cbInKuLi.ItemsSource);

    itemsViewOriginal.Filter = ((o) =>
    {
        if (String.IsNullOrEmpty(cbInKuLi.Text)) return true;
        else
        {
            DeKreditor x = (DeKreditor)o;
            string filterText = cbInKuLi.Text;

            if (x.Nummer.ToLowerInvariant().Contains(filterText)
            || (!string.IsNullOrWhiteSpace(x.Firma) && x.Firma.ToLowerInvariant().Contains(filterText))
            || (!string.IsNullOrWhiteSpace(x.Vorname) && x.Vorname.ToLowerInvariant().Contains(filterText))
            || (!string.IsNullOrWhiteSpace(x.Name) && x.Name.ToLowerInvariant().Contains(filterText)))
                return true;
            else
                return false;
        }
    });

    itemsViewOriginal.Refresh();

    cbInKuLi.IsDropDownOpen = true;
}

XAML:

<ComboBox   
    x:Name="cbInKuLi" 
    StaysOpenOnEdit="True"  
    IsEditable="True" 
    IsTextSearchEnabled="False" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Center" 
    Grid.Row="0" 
    Grid.Column="1" 
    Margin="5,0,5,5" 
    SelectionChanged="CbInKuLi_SelectionChanged" 
    KeyUp="CbInKuLi_KeyUp" 
    TextOptions.TextFormattingMode="Ideal" />

Upvotes: 1

Views: 54

Answers (1)

Henka Programmer
Henka Programmer

Reputation: 747

The Text Highlight caused because of setting IsDropDownOpen to true. The Editable ComboBox auto select the Text if it is Opened, so you could get the TextBox from the template of the ComboBox by its Name than set the selection length to zero at the end of the text.

private void CbInKuLi_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
    {
        CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(cbInKuLi.ItemsSource);

        itemsViewOriginal.Filter = ((o) =>
        {
            if (String.IsNullOrEmpty(cbInKuLi.Text)) return true;
            else
            {
                Model x = (Model)o;
                string filterText = cbInKuLi.Text;

                if (x.Text.ToLowerInvariant().Contains(filterText))
                    return true;
                else
                    return false;
            }
        });

        itemsViewOriginal.Refresh();
        cbInKuLi.IsDropDownOpen = true;
        var textbox = (TextBox)cbInKuLi.Template.FindName("PART_EditableTextBox", cbInKuLi);
        textbox.Select(textbox.Text.Length, textbox.Text.Length);
    }

UPDATE:

From comments you can replace the last line by the following line and it is better than the original one:

textbox.CaretIndex = textbox.Text.Length;

Upvotes: 1

Related Questions