У меня есть 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;
}
}
Я использовал IsTextSearchEnabled = «False» в XAML и, кажется, работает, но есть один побочный эффект. Когда ComboBox становится редактируемым, он сохраняет слово «Пользовательский» в поле, а не очищает его как и раньше. Я попытался очистить его с помощью comboBox1.Text = string.Empty; и comboBox1.SelectedItem = string.Empty; но это не ясно. –
Действие action =() => { // Очистить пользовательский текст comboBox1.Text = string.Empty; }; Dispatcher.BeginInvoke (System.Windows.Threading.DispatcherPriority.Normal, действие); Удалить текст следующим образом – WPFUser
Мне удалось использовать comboBox1.SelectedIndex = -1; вместо string.Empty, и он очистил редактируемый текст. –