Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法捕获wpf中组合框中的向下箭头_Wpf_Wpf Controls - Fatal编程技术网

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

无法捕获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="

我在wpf中的窗口上有一个组合框,我正在尝试捕获该组合框的向下箭头键,但我无法这样做。下面是我仅有的combobox代码

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

    }
}