2011-08-26 10 views
6

Để 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?

+0

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

Trả lời

2

Nếu bạn di chuyển tất cả các con đường xuống phía dưới của tài liệu ComboBox trên MSDN bạn sẽ thấy rằng có một câu trả lời rất đơn giản càng tốt: set ComboBox.IsEditable bạn false. Người dùng vẫn có thể chọn các mục trong trình chỉnh sửa bằng cách nhập tiền tố vào hộp, nhưng họ sẽ chỉ có thể nhập các giá trị đã xuất hiện trong danh sách.

Nhược điểm là bạn không nhận được bất kỳ hành vi giống như "TextBox" thông thường nào, đặc biệt, bạn không thể sao chép/dán mục đã chọn ra khỏi hộp tổ hợp. Nếu đó cũng là một vấn đề cho bạn, hãy cho chúng tôi biết, nhưng đó là hành vi điển hình cho kiểu ComboBoxown DropDownList trong Windows.

+0

Đề nghị tốt, tôi đã thử nó và gần như những gì tôi đang tìm kiếm. Chỉ bây giờ người dùng không thể nhìn thấy những gì anh/cô ấy đang gõ. Điều này có thể xảy ra khi IsEditable = false? – Daanvl

Các vấn đề liên quan