我已经更改了我的WPF Combobox,以便在我开始输入时根据包含字符串的项目过滤列表(与刚刚开始时相反)。请看这里的例子:
当我按向下箭头时:
正如你所看到的那样,它正在向下移动(因为它正在选择列表中的第二个)。但是,一旦它向下移动,它就会改变SelectedItem,从而触发我的过滤功能。这会将下拉列表过滤为包含框中字符串的项目。因为只有一个具有匹配的名称,现在是用户拥有的唯一选择。
我需要一种在不更改SelectedItem的情况下向下滚动的方法,或者至少没有在文本框中反映出该更改。
答案 0 :(得分:0)
我认为没有直接的方法可以做到这一点。最简单的方法是创建一个继承自ComboBox
xaml控件的类,使用一个名为IsReadOnly
的新属性,然后可以覆盖OnPreviewKeyDown
方法
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if (IsReadOnly)
{
if (e.Key == Key.Down || e.Key == Key.Up)
{
e.Handled = true;
return; // do not call the base class method OnPreviewKeyDown()
}
}
base.OnPreviewKeyDown(e);
}