2016-12-20 6 views
0

У меня есть ComboBox WPF, который имеет список чисел. Он также имеет пользовательский элемент, который превращается в редактируемое текстовое поле для ввода пользователем собственного значения.Как предотвратить навигацию клавиатуры в Editable ComboBox

Пока в Редактируемом ComboBox, если я нажимаю номер, который находится в списке элементов, он перескакивает на это число и из Редактируемого текстового поля.

Пример: В ComboBox есть элементы «1», «2», «3», «Пользовательский». Я нажимаю Custom, чтобы ввести собственное значение. Жму 3 к типу "30" и переходит к пункту 3.

XAML

<ComboBox x:Name="comboBox1" HorizontalAlignment="Left" Margin="115,156,0,0" VerticalAlignment="Top" Width="53" Foreground="White"> 
    <System:String>1</System:String> 
    <System:String>2</System:String> 
    <System:String>3</System:String> 
    <System:String>Custom</System:String> 
</ComboBox> 

я сделать поворот ComboBox от статического редактируемый с помощью C#

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    // Custom ComboBox Editable 
    if ((string)comboBox1.SelectedItem == "Custom" | comboBox1.SelectedValue == null) 
    { 
     comboBox1.IsEditable = true; 
    } 

    // Other Items Disable Editable 
    if ((string)comboBox1.SelectedItem != "Custom" && comboBox1.SelectedValue != null) 
    { 
     comboBox1.IsEditable = false; 
    } 

    // Maintain Editable ComboBox while typing 
    if (comboBox1.IsEditable == true) 
    { 
     comboBox1.IsEditable = true; 

     // Clear Custom Text 
     comboBox1.Text = string.Empty; 
    } 
} 

ответ

2

Вы может попытаться отключить IsTextSearchEnabled.

См: IsTextSearchEnabled

+0

Я использовал IsTextSearchEnabled = «False» в XAML и, кажется, работает, но есть один побочный эффект. Когда ComboBox становится редактируемым, он сохраняет слово «Пользовательский» в поле, а не очищает его как и раньше. Я попытался очистить его с помощью comboBox1.Text = string.Empty; и comboBox1.SelectedItem = string.Empty; но это не ясно. –

+0

Действие action =() => { // Очистить пользовательский текст comboBox1.Text = string.Empty; }; Dispatcher.BeginInvoke (System.Windows.Threading.DispatcherPriority.Normal, действие); Удалить текст следующим образом – WPFUser

+1

Мне удалось использовать comboBox1.SelectedIndex = -1; вместо string.Empty, и он очистил редактируемый текст. –

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