嗨,我在 WPF 中有一个 ComboBox
<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();
}
最佳答案
这就是我修复它的方式-
在我的 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,这样我的光标将停留在用户输入的文本的末尾。 I pass 是长度为 0 来清除选择。
关于c# - WPF 组合框在第一个字母输入时自动突出显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17250650/