Để làm rõ tôi có một combobox với bộ sưu tập có thể quan sát được ràng buộc với thuộc tính nguồn của nó. Tôi muốn người dùng có thể nhập chỉ các mục ar hiện diện trong bộ sưu tập. trong khi vẫn giữLàm cách nào để hạn chế đầu vào của người dùng trong hộp tổ hợp, Vì vậy, u chỉ có thể nhập các từ nằm trong bộ sưu tập?
IsTextSearchEnabled="true"
Chức năng. Vì vậy, tôi đã tìm kiếm trực tuyến một ví dụ về cách thực hiện việc này. Cho đến bây giờ tôi đã quyết định tôi nên sử dụng các sự kiện
<ComboBox TextInput="cbb1_TextInput" />
Sự kiện và sau đó tìm kiếm bộ sưu tập. Nhưng tôi cố gắng không thể duy trì tính năng tự động hoàn thành, selectedindex bị lộn xộn và hành vi không mong muốn khác. Kể từ khi tôi là một noob trong wpf tôi tự hỏi, nếu có những giải pháp mà chỉ sử dụng một phần XAML?
EDIT: tôi đã cố gắng một cái gì đó như thế này:
private void fase1cbb1_KeyUp(object sender, KeyEventArgs e)
{
ComboBox cb = (ComboBox)sender;
bool match = false;
TextBox tb = (TextBox)cb.Template.FindName("PART_EditableTextBox", cb);
if (tb.Text.Length > 0)
{
foreach (MenuItem MI in cb.Items)
{
if (MI.Text.StartsWith(tb.Text))
{
match = true; ;
}
}
if (!match)
{
int len = tb.Text.Length;
if (len > 0)
{
tb.Text = tb.Text.Substring(0, len - 1);
tb.SelectionStart = len;
}
}
}
}
Nhưng ngay khi không có trận đấu nữa có được không chọn mục, và không có autocomplete hơn/textsearch.
thnx cho bất kỳ lời khuyên hoặc ví dụ nào.
SOLUTION: WPF ComboBox with IsEditable="True" - How can I indicate that no match was found?
Tôi sẽ không sử dụng sự kiện KeyUp. Không có một BeforeValueChange hoặc một cái gì đó như thế này? (không chắc chắn, tôi chủ yếu sử dụng infragistics) Nếu vậy, bạn có thể kiểm tra xem văn bản mới có khớp với một mục hay không. Nếu không, bạn hủy sự kiện thay đổi văn bản. – Tipx