Combobox下拉列表中存在奇怪的问题

时间:2011-10-01 17:19:13

标签: .net wpf user-interface combobox drop-down-menu

再一次,我找不到一个简洁的解决方案来解决WPF中的简单UI问题。我希望每当组合框获得焦点时,组合框下拉列表就会出现。所以我在焦点事件中写了这个:

 private void comboBoxAC_Cat_GotFocus(object sender, RoutedEventArgs e)
    {
        comboBoxAC_Cat.IsDropDownOpen = true;
    }

但现在的问题是,一旦下拉列表打开,应用程序就会陷入其中。无论我做什么,无论是按回车还是其他任何东西,它都不能从下拉列表中出来。我尝试注册失去焦点或其他事件,但似乎没有任何工作。这是我在应用程序中的事件处理程序列表,一旦进入下拉列表就变得无用。

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;

    }

任何人都可以帮我解决这个问题吗?

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

现在很难实现???我认为这正是组合框的功能

1 个答案:

答案 0 :(得分:2)

我不明白,如果我使用下面的代码

    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;
        }
    }

我得到了我认为你想要的东西,当控制得到焦点时我的组合框下拉打开,如果我选择一个列表项目按下输入或通过鼠标点击控制失去焦点

这不是你想要的吗?