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
.net 组合框下拉列表中的奇怪问题_.net_Wpf_User Interface_Combobox_Drop Down Menu - Fatal编程技术网

.net 组合框下拉列表中的奇怪问题

.net 组合框下拉列表中的奇怪问题,.net,wpf,user-interface,combobox,drop-down-menu,.net,Wpf,User Interface,Combobox,Drop Down Menu,我再一次在WPF中找不到一个简单UI问题的简洁解决方案。我希望每当组合框获得焦点时,组合框下拉列表都会出现。所以我在“关注焦点”活动中写了这篇文章: private void comboBoxAC_Cat_GotFocus(object sender, RoutedEventArgs e) { comboBoxAC_Cat.IsDropDownOpen = true; } 但现在的问题是,一旦下拉列表打开,应用程序就会卡在其中。无论我做什么,无论我按enter

我再一次在WPF中找不到一个简单UI问题的简洁解决方案。我希望每当组合框获得焦点时,组合框下拉列表都会出现。所以我在“关注焦点”活动中写了这篇文章:

 private void comboBoxAC_Cat_GotFocus(object sender, RoutedEventArgs e)
    {
        comboBoxAC_Cat.IsDropDownOpen = true;
    }
但现在的问题是,一旦下拉列表打开,应用程序就会卡在其中。无论我做什么,无论我按enter还是其他什么,它都不能从下拉列表中出来。我试着注册来转移注意力或其他事件,但似乎没有任何效果。下面是我在应用程序中的事件处理程序列表,一旦进入下拉列表,这些事件处理程序将变得无用

private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        var uie = e.OriginalSource as UIElement;
        if (e.Source is Button)
            return;
        if (e.Key == Key.Enter)
        {
            e.Handled = true;
            uie.MoveFocus(
            new TraversalRequrest(
            FocusNavigationDiection.Next));
        }
    }
    private void comboBoxAC_Cat_LostFocus(object sender, RoutedEventArgs e)
    {
        (sender as ComboBox).IsDropDownOpen = false;

    }
有谁能帮我解决这个问题吗

我的基本要求很简单:只要使用tab或鼠标聚焦组合框,下拉列表就会打开。然后,用户应该能够选择项目,一旦他按enter键从下拉列表中选择项目,它应该关闭,焦点应该移动到下一个ui元素


现在很难实现吗???我认为这正是组合框的功能,如果我使用下面的代码,我不明白

    private bool returnedFocus = false;

    private void myComboBox_GotFocus(object sender, RoutedEventArgs e)
    {
        if (e.OriginalSource.GetType() != typeof(ComboBoxItem) && !returnedFocus)
        {
            cmb.IsDropDownOpen = true;
        }
    }

    private void myComboBox_LostFocus(object sender, RoutedEventArgs e)
    {
        if (e.OriginalSource.GetType() != typeof(ComboBoxItem))
        {
            ComboBox cb = (ComboBox)sender;
            returnedFocus = cb.IsDropDownOpen;
        }
    }
我得到的正是我认为你们想要的,当控件获得焦点时,我的组合框下拉列表就会打开,如果我选择了一个列表项,按enter键或通过鼠标单击contol会失去焦点


这不是你想要的吗?

链接到IsDropDownOpen属性:你应该看看这个@Marco:是的,但是我无法修复我的应用程序,我的要求与下拉列表行为密切相关,无论我尝试了什么,它仍然保持不变……谢谢,但当控件获得焦点时,此代码会打开下拉列表,但当我按enter键或选择列表项时,不会关闭它。。我无法理解其行为。我使用的代码与您编写的代码完全相同…是否有任何其他xaml属性需要调整???。这太奇怪了,我在发布代码之前测试了该代码,尝试打开一个只有两个控件的新项目,一个在带有默认属性的简单组合框之前,一个在之后,这就是我所做的哦我很抱歉我的不好…它工作了…问题是我放在中间的一个消息框…现在它工作得很好..非常感谢..)