我有一个WPF的ComboBox组件,需要更改弹出列表的默认行为。
现在,通过按上下箭头键,SelectedItem会自动更改。我需要只有通过按Enter键或点击鼠标才能更改SelectedItem。
如何实现?
我已经对ComboBox进行了子类化:
这段代码不起作用——没有弹出窗口,用户也无法选择项目。我应该在哪里写什么?
谢谢。
UPD1: 我需要与 ComboBox 的弹出窗口相同的功能,用户可以通过鼠标选择项目。每个项目都可以被鼠标悬停,但不能被选中。只有按下鼠标按钮才能进行选择。我需要相同的功能。"上"和"下"只会在弹出窗口中突出显示项目,但是只有通过按"Enter"或鼠标单击才会更改 SelectedItem。
UPD2: 如果我用鼠标点击打开 ComboCox 中的 Popup 按钮,我可以用鼠标在 Popup 中突出显示项目,但只有当我点击项目时,SelectedItem 才会更改。
我需要相同的键盘功能。如果我在 ComboBox 中开始输入,Popup 就会打开。我必须使用键盘 "Up" 和 "Down" 来突出显示项目。ComboBox 中的 TextBox 在突出显示时不得更改,并且只有在我按下 "Enter"(或鼠标单击)时,SelectedItem 才会更改。
UPD3: 演示解决方案链接:下载
现在,通过按上下箭头键,SelectedItem会自动更改。我需要只有通过按Enter键或点击鼠标才能更改SelectedItem。
如何实现?
我已经对ComboBox进行了子类化:
protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e)
{
Debug.Write("Pressed " + e.Key+ " ");
if (e.Key == System.Windows.Input.Key.Up || e.Key == System.Windows.Input.Key.Down)
{
// ???
e.Handled = true;
return;
}
base.OnPreviewKeyDown(e);
}
这段代码不起作用——没有弹出窗口,用户也无法选择项目。我应该在哪里写什么?
谢谢。
UPD1: 我需要与 ComboBox 的弹出窗口相同的功能,用户可以通过鼠标选择项目。每个项目都可以被鼠标悬停,但不能被选中。只有按下鼠标按钮才能进行选择。我需要相同的功能。"上"和"下"只会在弹出窗口中突出显示项目,但是只有通过按"Enter"或鼠标单击才会更改 SelectedItem。
UPD2: 如果我用鼠标点击打开 ComboCox 中的 Popup 按钮,我可以用鼠标在 Popup 中突出显示项目,但只有当我点击项目时,SelectedItem 才会更改。
我需要相同的键盘功能。如果我在 ComboBox 中开始输入,Popup 就会打开。我必须使用键盘 "Up" 和 "Down" 来突出显示项目。ComboBox 中的 TextBox 在突出显示时不得更改,并且只有在我按下 "Enter"(或鼠标单击)时,SelectedItem 才会更改。
UPD3: 演示解决方案链接:下载
MyComboBox
类中完成它,而不是在 XAML 中。这是否可能? - Lari13MyComboBox : ComboBox
的类,因此我不需要附加行为,因为我已经在ComboBox
内部了 :) - Lari13