Tôi đã có vấn đề này rất giống nhau và giống như một số người dùng mới làm quen với WPF, đấu tranh để có được giải pháp được đưa ra bởi Einar Guðsteinsson để làm việc. Vì vậy, để hỗ trợ cho câu trả lời của mình, tôi đang dán các bước này để làm việc này. (Hay chính xác hơn cách tôi làm việc này).
Trước tiên, hãy tạo lớp combobox tùy chỉnh kế thừa từ lớp Combobox. Xem mã bên dưới để thực hiện đầy đủ. Bạn có thể thay đổi mã trong OnDropSelectionChanged để phù hợp với yêu cầu cá nhân của bạn.
không gian tên 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;
}
}
}
Đảm bảo rằng lớp kết hợp tùy chỉnh này tồn tại trong cùng một dự án. Bạn có thể sử dụng mã bên dưới để tham chiếu kết hợp này trong giao diện người dùng của mình.
<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! Mọi thắc mắc, xin hỏi! Tôi sẽ cố hết sức để giúp đỡ.
Cảm ơn Einar Guðsteinsson về giải pháp của anh ấy!
Nguồn
2013-08-22 12:44:48
nào "ComboBox thả xuống" bạn đang nói về? – Trainee4Life
Bạn có đặt false thành thuộc tính IsTextSearchEnabled của comboBox không ?? Nó sẽ vô hiệu hóa lựa chọn văn bản. hy vọng điều đó sẽ hữu ích. –