Tuve el mismo problema y, como algunos de los usuarios que son nuevos en WPF, tuvieron problemas para conseguir que la solución ofrecida por Einar Guðsteinsson funcionara. Entonces, en apoyo de su respuesta, estoy pegando aquí los pasos para que esto funcione. (O más exactamente cómo conseguí que esto funcione).
Primero cree una clase de combobox personalizada que hereda de la clase Combobox. Vea el código a continuación para la implementación completa. Puede cambiar el código en OnDropSelectionChanged para satisfacer sus necesidades individuales.
espacio de nombres MyCustomComboBoxApp { usando System.Windows.Controls;
public class MyCustomComboBox : ComboBox
{
private int caretPosition;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var element = GetTemplateChild("PART_EditableTextBox");
if (element != null)
{
var textBox = (TextBox)element;
textBox.SelectionChanged += OnDropSelectionChanged;
}
}
private void OnDropSelectionChanged(object sender, System.Windows.RoutedEventArgs e)
{
TextBox txt = (TextBox)sender;
if (base.IsDropDownOpen && txt.SelectionLength > 0)
{
txt.CaretIndex = caretPosition;
}
if (txt.SelectionLength == 0 && txt.CaretIndex != 0)
{
caretPosition = txt.CaretIndex;
}
}
}
Asegúrese de que esta clase de combo personalizada exista en el mismo proyecto. Entonces puede usar el código a continuación para hacer referencia a este combo en su UI.
<Window x:Class="MyCustomComboBoxApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cc="clr-namespace:MyCustomComboBoxApp"
Title="MainWindow" Height="350" Width="525" FocusManager.FocusedElement="{Binding ElementName=cb}">
<Grid>
<StackPanel Orientation="Vertical">
<cc:MyCustomComboBox x:Name="cb" IsEditable="True" Height="20" Margin="10" IsTextSearchEnabled="False" KeyUp="cb_KeyUp">
<ComboBoxItem>Toyota</ComboBoxItem>
<ComboBoxItem>Honda</ComboBoxItem>
<ComboBoxItem>Suzuki</ComboBoxItem>
<ComboBoxItem>Vauxhall</ComboBoxItem>
</cc:MyCustomComboBox>
</StackPanel>
</Grid>
</Window>
Thats it! Cualquier pregunta, por favor pregunta! Haré todo lo posible para ayudar.
¡Gracias a Einar Guðsteinsson por su solución!
Qué "cuadro combinado desplegable" estás hablando? – Trainee4Life
¿Ha establecido false en la propiedad IsTextSearchEnabled del comboBox? Deshabilitará la selección del texto. espero que ayude. –