无法在wpf中捕获组合框中的箭头

时间:2010-08-17 12:59:54

标签: wpf wpf-controls

我在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");
    }

当我按下箭头键时,事件甚至没有被击中。

3 个答案:

答案 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)
    {

    }
}