4

こんにちは、私はComboBoxWPFを持っています

<ComboBox x:Name="Select_Food" Grid.ColumnSpan="3" Margin="10"  Text="" IsEditable="True"  
              ItemsSource="{Binding}" KeyUp="Select_Food_KeyUp" IsTextSearchEnabled="false"  />

ユーザーがテキスト ボックスに入力している間、オプションとしてデータベースから情報を取得しています。現在、すべてが機能しますが、唯一の問題は、テキストボックスに最初の文字を入力すると、リスト内の項目のいずれかがその文字で始まる場合、その文字が自動的に強調表示されることです。このため、それ以上入力すると最初の文字が上書きされます。これは問題です。この最初のハイライトを停止するにはどうすればよいですか。「グーグル検索のような」コンボボックスを実現しようとしています。

これがコードです。助けてください。

 // While typing this function is called on every keyup stroke
    private void Select_Food_KeyUp(object sender, KeyEventArgs e)
    {
        try
        {
            SqlCeCommand command = new SqlCeCommand("SELECT FOODITEM_RS FROM FOOD WHERE FOODITEM_RS LIKE @fitem", thisConnection);
            command.Parameters.AddWithValue("@fitem", "%" + Select_Food.Text + "%");
            SqlCeDataAdapter da = new SqlCeDataAdapter(command);
            DataSet ds = new DataSet();
            thisConnection.Open();
            da.Fill(ds, "FOOD");
            Select_Food.ItemsSource = ds.Tables[0].DefaultView;
            Select_Food.DisplayMemberPath = ds.Tables[0].Columns["FOODITEM_RS"].ToString();

        }
        catch (SqlCeException x)
        {
            MessageBox.Show(x.ToString());
        }
        //Open dropdown menu
        Select_Food.IsDropDownOpen = true;

        thisConnection.Close();

    }
4

4 に答える 4

1

これが私がそれを修正した方法です-

私のkeyupイベントハンドラーで、次のコードを追加しました-

    var textbox = (TextBox)cmbBox.Template.FindName("PART_EditableTextBox", cmbBox);
    if (textbox != null && _firstKey && textbox.SelectionLength > 0)
    {
        textbox.Select(textbox.SelectionLength, 0);                
        _firstKey = false;
    }

_firstKey は私が追加したフラグです。この方法では、このイベントが最初に発生したときにのみハイライトがキャンセルされます。これが問題です。後続の強調表示 (ユーザーが入力した内容を消去するための可能性が最も高い) は許可され、そのまま残されます。

ユーザーが入力したテキストの最後にカーソルが残るように、SelectionLength から Select を呼び出します。選択をクリアするには長さ 0 を渡します。

于 2013-11-18T22:46:21.510 に答える