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