【问题标题】:Strange issues with drop down list of Combobox组合框下拉列表的奇怪问题
【发布时间】:2011-10-01 17:19:12
【问题描述】:

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

 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;

    }

有人可以帮我解决这个问题吗?

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

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

【问题讨论】:

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


【解决方案1】:

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

    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 或通过鼠标单击控件失去焦点

这不是你想要的吗?

【讨论】:

  • 谢谢,但是当控件获得焦点时,此代码会打开下拉菜单,但当我按 Enter 或选择列表项时不会关闭它。我无法理解行为。我使用的是完全相同的您编写的代码...我需要调整任何其他 xaml 属性吗?...
  • 太奇怪了,我在发布之前测试了该代码,尝试打开一个只有两个控件的新项目,一个之前和一个在具有默认属性的简单组合框之后,这就是我所做的
  • 哦,我很抱歉我的错......它可以工作......问题是我放在中间的一个消息框......现在它工作完美......非常感谢......:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
  • 2010-11-30
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多