2013-11-29 2 views
1

Я использую .NET framework 4.0 для создания своего приложения.Отключить автозаполнение в Combobox в wpf

У меня есть combobox, в котором я хочу отключить метод app-append combobox. Вместо этого я хочу только предлагать-только.

Во многих вопросах пользователи просят отключить функцию автозаполнения, и везде я получил тот же ответ. то есть установите IsTextSearchEnabled в значение False.

Когда IsTextSearchEnabled = True

enter image description here

Когда IsTextSearchEnabled = False

enter image description here

Что я хочу:

enter image description here

Когда пользовательские нажатия вводят в Combobox, я хочу, чтобы Item был добавлен в текстовое поле combobox.

Возможно ли это в WPF?

+0

Это возможно. Слушайте TextChanged из TextBox и всякий раз, когда текст не равен, текст, который вы ввели, просто заменит его тем, который вы ввели. Вот как вы сохраните только текст в TextBox. Хотя, когда вводят нажатие, возьмите SelectedItem и поместите его в TextBox. –

+0

Что вы имеете в виду при прослушивании TextChanged из TextBox и всякий раз, когда текст не равен введенному вами тексту, просто замените его тем, который вы ввели? Можете ли вы дать мне демонстрационный пример? – Khushi

+0

Да, я дам вам демоверсию. Я имею в виду, что это TextBox, который вы вводите. Когда вы смотрите на ControlTemplate из ComboBox, вы выясните название части TextBox. Затем вы можете буквально получить экземпляр TextBox и прослушать событие TextChanged. Когда вы начнете вводить текст, ComboBox будет искать наилучшее совпадение, и он заменит введенный текст текстом лучшего соответствия. Чтобы избежать этого, просто всегда подталкивайте текст к текущему тексту TextBox. Это то, что я считаю. Я отвечу вам демо в ответ. –

ответ

1

Как и обещалось, это демо. Как вы можете видеть, я сделал то, что я объяснил в своих комментариях. Я слушал событие с измененным текстом.

Проверьте это:

<Grid> 
    <local:MyComboBox x:Name="comboBox" IsEditable="True" 
       VerticalAlignment="Center" 
       IsTextSearchEnabled="True"> 
     <ComboBoxItem>hello</ComboBoxItem> 
     <ComboBoxItem>world</ComboBoxItem> 
     <ComboBoxItem>123</ComboBoxItem> 
    </local:MyComboBox> 
</Grid> 

public class MyComboBox : ComboBox 
{ 
    private string myValue; 
    private bool needsUpdate; 

    public override void OnApplyTemplate() 
    { 
     TextBox tbx = this.GetTemplateChild("PART_EditableTextBox") as TextBox; 

     tbx.PreviewKeyDown += (o, e) => 
     { 
      this.needsUpdate = true; 
     }; 

     tbx.TextChanged += (o, e) => 
      { 
       if (needsUpdate) 
       { 
        myValue = tbx.Text; 
        this.needsUpdate = false; 
       } 
       else 
       { 
        tbx.Text = myValue; 
       } 
      }; 

     base.OnApplyTemplate(); 
    } 
} 
+0

извините, но я не вижу никаких изменений в выходе. Мой вывод выглядит так же, как и первое изображение в вопросе. – Khushi

+0

Я заметил изменение, которое, когда я нажимаю клавиши со стрелками вверх или вниз, текст текстового поля изменяется в первый раз, когда нажата клавиша со стрелкой, но после этого, независимо от того, сколько раз я нажимаю клавиши со стрелками, текст в текстовом поле не изменяется, но выбор элемента изменяется путем нажатия клавиши со стрелкой вверх или вниз. – Khushi

+0

Это работает для меня. Когда я открываю ComboBox и начинаю печатать, функция автокомплекса отключается. Что вы делаете именно с ComboBox? –

Смежные вопросы