如何禁用第一个输入的标记

时间:2019-06-17 10:01:14

标签: c# wpf combobox

我创建了一个可编辑的组合框,用于进行Google搜索(过滤)。我正在使用ActionHandler“ KeyUp”,并且第一个输入已突出显示并被覆盖。如何禁用覆盖或突出显示?

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" />

1 个答案:

答案 0 :(得分:1)

由于将IsDropDownOpen设置为true而导致的文本突出显示。 如果文本框已打开,则可编辑组合框会自动选择文本,因此您可以从组合框的模板中按其名称获取文本框,而不是在文本末尾将选择长度设置为零。

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

更新:

从注释中,您可以用以下行替换最后一行,它比原始行要好:

textbox.CaretIndex = textbox.Text.Length;