Avevo questo stesso problema e, come alcuni degli utenti che sono nuovi a WPF, ho faticato per ottenere la soluzione data da Einar Guðsteinsson al lavoro. Quindi a sostegno della sua risposta sto incollando qui i passaggi per farlo funzionare. (O più esattamente come ho fatto a farlo funzionare).
Per prima cosa creare una classe combobox personalizzata che eredita dalla classe Combobox. Vedi il codice qui sotto per la piena implementazione. È possibile modificare il codice in OnDropSelectionChanged in base alle proprie esigenze individuali.
spazio dei nomi MyCustomComboBoxApp { using 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;
}
}
}
Verificare che questa classe combo personalizzata esista nello stesso progetto. Allora puoi usare il codice qui sotto per fare riferimento a questa combo nell'interfaccia utente.
<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>
Questo è tutto! Qualsiasi domanda, per favore chiedi! Farò del mio meglio per aiutare.
Grazie a Einar Guðsteinsson per la sua soluzione!
fonte
2013-08-22 12:44:48
Quale "casella combinata a discesa" stai parlando? – Trainee4Life
Hai impostato false sulla proprietà IsTextSearchEnabled del comboBox ?? Disabilita la selezione del testo. la speranza che ti aiuterà. –