2011-08-26 35 views
6

明確にするために、私はコンボボックスにitemourceプロパティにバインドされた観測可能なコレクションを持っています。私は、ユーザーがコレクションに存在するアイテムだけを入力できるようにしたい。保持している間は、コンボボックス内のユーザー入力を制限するにはどうすればいいですか?コレクション内にある単語だけを入力できますか?

IsTextSearchEnabled="true" 

機能性です。 私はこれを行う方法の例をオンラインで探しています。今までは、私は私が使用する必要があると思った。

<ComboBox TextInput="cbb1_TextInput" /> 

イベントを収集してから検索します。しかし、私の弱い試みの傾きは、オートコンプリート機能を維持し、selectedindexは混乱し、他の望ましくない動作を取得します。私はwpfのかなりのノブなので、XAMLの部分だけを使うソリューションがあるのだろうか?

EDIT: 私はこのような何か試してみました:

 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です。

SOLUTION:あなたは、MSDNのComboBoxドキュメントの一番下まですべての方法をスクロールすると WPF ComboBox with IsEditable="True" - How can I indicate that no match was found?

+0

私はKeyUpイベントを使用しません。 BeforeValueChangeやこれに類するものはありませんか? (わからない、私は主にInfragisticsを使用する)そうであれば、新しいテキストがアイテムと一致するかどうかを確認することができる。表示されない場合は、テキスト変更イベントをキャンセルします。 – Tipx

答えて

2

あなたは1つの非常にシンプル可能な答えがあることを見つける:falseにごComboBox.IsEditableを設定します。ユーザーは、プレフィックスをボックスに入力してエディタでアイテムを選択することはできますが、リストに既に表示されている値のみを入力することができます。

通常の「テキストボックス」のような動作を得られないという欠点があります。特に、選択した項目をコンボボックスからコピー&ペーストすることはできません。それも問題ですが、われわれにお知らせください。しかし、これはWindowsのDropDownListスタイルのコンボボックスの典型的な動作です。

+0

良い提案、私はそれを試して、ほとんど私が探しているもの。今では、ユーザーは入力しているものを見ることができません。 IsEditable = falseの場合はこれが可能ですか? – Daanvl

関連する問題