无法捕获wpf中组合框中的向下箭头
我在wpf中的窗口上有一个组合框,我正在尝试捕获该组合框的向下箭头键,但我无法这样做。下面是我仅有的combobox代码无法捕获wpf中组合框中的向下箭头,wpf,wpf-controls,Wpf,Wpf Controls,我在wpf中的窗口上有一个组合框,我正在尝试捕获该组合框的向下箭头键,但我无法这样做。下面是我仅有的combobox代码 <ComboBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" PreviewKeyDown="comboBox1_PreviewKeyDown" KeyDown="
<ComboBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120"
PreviewKeyDown="comboBox1_PreviewKeyDown" KeyDown="comboBox1_KeyDown" IsEditable="True"/>
当我按下向下箭头键时,事件甚至没有被点击。请尝试处理PreviewKeyUp(或KeyUp)。如果这不起作用,那么您的窗口或代码中必须有更多内容(您是否正在处理这些事件的其他实例)?通过从基本ComboBox继承创建一个新的ComboBox类。下面的代码解释了如何使用。当您将组合框添加到另一个控件(如数据网格单元)时,可能会遇到此类问题。希望这有帮助
这段代码对我很有帮助
<StackPanel PreviewKeyDown="StackPanel_PreviewKeyDown">
<ComboBox>
<ComboBoxItem>item1</ComboBoxItem>
<ComboBoxItem>item2</ComboBoxItem>
<ComboBoxItem>item3</ComboBoxItem>
</ComboBox>
</StackPanel>
嗨,Wonko,预演会成功了。但你能解释一下y PreviewKeyDown事件并不是因为向下箭头键而被解雇的吗?我对此并不肯定,但我相信这与PreviewKeyDown是一个隧道事件这一事实有关。通过使ComboBox可编辑,我相信成为ComboBox的ControlTemplate一部分的TextBox正在吞噬该事件。它是隧道事件这一事实不意味着samar的PreviewKeyDown事件处理程序应该在TextBox有机会处理它之前启动吗?我很确定这是WinForms,不是WPF。@OlaBerntsson是的,它适用于WinForms,并且此解决方案适用于特定场景,最新版本可能不需要此解决方案。我想它可能对WPF也有帮助,或者有什么帮助。简单而健壮的解决方案。我确认这是一个运行良好的解决方案,也是一个合适的答案。
public class MyComboBox : ComboBox
{
protected override bool ProcessKeyMessage(ref Message m)
{
KeyEventArgs keyArgs = new KeyEventArgs((Keys)m.WParam);
switch(keyArgs.KeyCode)
{
case Keys.Up :
//Implement your code here.
return true;
case Keys.Down :
//Implement your code here.
return true;
}
return base.ProcessKeyMessage(ref m);
}
}
<StackPanel PreviewKeyDown="StackPanel_PreviewKeyDown">
<ComboBox>
<ComboBoxItem>item1</ComboBoxItem>
<ComboBoxItem>item2</ComboBoxItem>
<ComboBoxItem>item3</ComboBoxItem>
</ComboBox>
</StackPanel>
private void StackPanel_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Down)
{
}
}