Miałem ten sam problem i jak niektórzy użytkownicy są nowi w WPF, walczył, aby uzyskać rozwiązanie podane przez Einar Guðsteinsson do pracy. Więc popieram jego odpowiedź, wklejając tutaj kroki, aby to zadziałało. (A dokładniej, jak mam to do roboty).
Najpierw utwórz niestandardową klasę combobox, która dziedziczy po klasie Combobox. Zobacz pełny kod poniżej. Możesz zmienić kod w OnDropSelectionChanged, aby dostosować go do indywidualnych wymagań.
namespace MyCustomComboBoxApp { przy użyciu 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;
}
}
}
Upewnij się, że ta niestandardowa klasa kombi istnieje w tym samym projekcie. Możesz użyć poniższego kodu, aby odwołać się do tej kombinacji w twoim interfejsie.
<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>
To wszystko! Wszelkie pytania, zadaj pytanie! Zrobię co w mojej mocy, aby pomóc.
Dziękuję Einarowi Guðsteinssonowi za jego rozwiązanie!
Który „ComboBox DropDown” ty mówisz? – Trainee4Life
Czy ustawiłeś wartość false na właściwość IsTextSearchEnabled w comboBox? Wyłącza wybór tekstu. nadzieję, że to pomoże. –