2011-08-26 4 views
6

명확히하기 위해 itemsource 속성에 바인딩 된 관찰 가능한 컬렉션이있는 콤보 상자가 있습니다. 사용자가 컬렉션에있는 항목 만 입력 할 수있게하려고합니다. 유지하는 동안콤보 상자의 사용자 입력을 제한하여 컬렉션에있는 단어 만 입력 할 수 있도록하려면 어떻게해야합니까?

IsTextSearchEnabled="true" 

기능. 저는 이것을 어떻게 수행하는지에 대한 예제를 온라인에서 찾고있었습니다. 지금까지 내가 사용해야한다고 생각했습니다.

<ComboBox TextInput="cbb1_TextInput" /> 

이벤트를 수집 한 다음 검색합니다. 하지만 미약 한 시도는 자동 완성 기능을 유지하지 못하며 selectedindex는 뒤죽박죽이되고 다른 원치 않는 행동을합니다. 이후 나는 wpf에 꽤 멍청한 사람이 XAML 부분만을 사용하는 솔루션이 있는지 궁금해하니?

편집 : 나는 이런 식으로 뭔가를 시도 :

 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; 

       } 
      } 
     } 
    } 

그러나 곧 더 이상 더 이상 항목이 선택 일치하고, 더 이상 자동 완성/TextSearch가 없기 때문에. 조언이나 예제는

thnx입니다.

해결 방법 : MSDN에 ComboBox 문서의 아래로 모든 방법을 스크롤하면 WPF ComboBox with IsEditable="True" - How can I indicate that no match was found?

+0

나는 KeyUp 이벤트를 사용하지 않을 것이다. BeforeValueChange 또는 이와 비슷한 것이 없습니까? (확실하지 않음, 주로 infragistics를 사용함) 그렇다면 새 텍스트가 항목과 일치하는지 확인할 수 있습니다. 그렇지 않으면 텍스트 변경 이벤트를 취소합니다. – Tipx

답변

2

하나 매우 간단 가능한 답가 있음을 확인할 수있는 것들 : 거짓에 ComboBox.IsEditable을 설정합니다. 사용자는 상자에 접두사를 입력하여 편집기에서 항목을 선택할 수 있지만 목록에 이미 표시된 값만 입력 할 수 있습니다.

단점은 일반적인 "텍스트 상자"와 같은 동작을하지 않는다는 것입니다. 특히 선택한 항목을 콤보 상자 밖으로 복사하거나 붙여 넣을 수는 없습니다. 또한 문제가되는 경우 알려 주시면되지만 Windows의 DropDownList 스타일 ComboBox에 대한 일반적인 동작입니다.

+0

좋은 제안, 나는 그것을 시도하고 거의 내가 뭘 찾고 있어요. 이제는 사용자가 입력하는 내용을 볼 수 없습니다. IsEditable = false 일 때 가능합니까? – Daanvl

관련 문제