避免按箭头按下selectItem更改

时间:2016-12-19 21:05:34

标签: c# wpf mvvm combobox

我已经更改了我的WPF Combobox,以便在我开始输入时根据包含字符串的项目过滤列表(与刚刚开始时相反)。请看这里的例子:

enter image description here

当我按向下箭头时:

enter image description here

正如你所看到的那样,它正在向下移动(因为它正在选择列表中的第二个)。但是,一旦它向下移动,它就会改变SelectedItem,从而触发我的过滤功能。这会将下拉列表过滤为包含框中字符串的项目。因为只有一个具有匹配的名称,现在是用户拥有的唯一选择。

我需要一种在不更改SelectedItem的情况下向下滚动的方法,或者至少没有在文本框中反映出该更改。

1 个答案:

答案 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);
            }