我在wpf的窗口上有一个组合框,我试图捕获这个组合框的向下箭头键,但我无法这样做。以下是我对组合框的唯一代码。
<ComboBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120"
PreviewKeyDown="comboBox1_PreviewKeyDown" KeyDown="comboBox1_KeyDown" IsEditable="True"/>
C#
private void comboBox1_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Down)
MessageBox.Show("hi");
}
private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Down)
MessageBox.Show("hi");
}
当我按下箭头键时,事件甚至没有被击中。
答案 0 :(得分:2)
尝试处理PreviewKeyUp(或KeyUp)。如果这不起作用,那么你的窗口或代码必须有更多(你在处理这些事件的其他实例)吗?
答案 1 :(得分:0)
通过从基础ComboBox继承来创建新的Combo box类。以下代码说明了操作方法。当您将组合框添加到另一个控件,如数据网格单元格时,您可能会遇到此类问题。希望这会有所帮助!
http://csharpquestsolution.blogspot.com/2013/11/arrow-key-events-not-getting-fired-on.html
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);
}
}
答案 2 :(得分:0)
此代码对我有帮助。
<StackPanel PreviewKeyDown="StackPanel_PreviewKeyDown">
<ComboBox>
<ComboBoxItem>item1</ComboBoxItem>
<ComboBoxItem>item2</ComboBoxItem>
<ComboBoxItem>item3</ComboBoxItem>
</ComboBox>
</StackPanel>
CodeBehind
private void StackPanel_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Down)
{
}
}