J'ai eu ce même problème et comme certains utilisateurs étaient nouveaux dans WPF, j'ai eu du mal à faire fonctionner la solution donnée par Einar Guðsteinsson. Donc, à l'appui de sa réponse, je colle ici les étapes pour que cela fonctionne. (Ou plus exactement comment j'ai eu ce travail).
Créez d'abord une classe de liste déroulante personnalisée qui hérite de la classe Combobox. Voir le code ci-dessous pour une implémentation complète. Vous pouvez modifier le code dans OnDropSelectionChanged pour répondre à vos besoins individuels.
espace de noms MyCustomComboBoxApp { en utilisant System.Windows.Controls; Vérifiez que cette classe de liste déroulante personnalisée existe dans le même projet.
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;
}
}
}
Puis vous pouvez utiliser le code ci-dessous pour référencer ce combo dans votre interface utilisateur.
<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>
C'est-à-dire! Des questions, s'il vous plaît demander! Je ferai de mon mieux pour aider.
Merci à Einar Guðsteinsson pour sa solution!
qui « ComboBox DropDown » parlez-vous? – Trainee4Life
Avez-vous défini false à la propriété IsTextSearchEnabled de la zone de liste déroulante? Cela désactivera la sélection du texte. espérons que cela aidera. –