2011-10-01 78 views
2

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

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,下拉列表应该打开。然后用户应该能够选择项目,并且一旦他按下回车键从下拉列表中选择一个项目,它应该关闭并且焦点应该移动到下一个UI元素。

现在很难实现???我认为这是完全是一个组合框

+0

链接到IsDropDownOpen属性:http://msdn.microsoft.com/en-us/library/system.windows.controls.combobox.isdropdownopen.aspx – Oosterman

+0

你应该看看这个http:// stackoverflow。 com/questions/1554630/c-combobox-gotfocus – MaRuf

+0

@Marco:是的,但我无法为我的应用程序获得修复,我的要求与下拉列表行为密切相关,无论我尝试它仍然保持不变。 ... – Sudh

回答

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

我得到正是我想你想的正是这种代码,我的组合框下拉打开时控制获得焦点,如果我选择listitem按下输入或通过鼠标点击控制丢失焦点

这不是你想要的吗?

+0

谢谢,但是当控件获得焦点时,此代码将打开下拉菜单,但在按下输入或选择列表项时不会关闭它。我无法理解行为。我正在使用与您编写的代码完全相同的代码。 ..有没有额外的xaml属性,我需要调整?? – Sudh

+0

它是如此奇怪,我测试过之前发布它的代码,尝试打开一个新的项目只有两个控件之前和一个简单的组合框与默认属性后,这就是我做的 – MaRuf

+0

哦,我很抱歉我的坏..它的作品...问题是我放在一个messagebox ..现在它完美的工作..感谢很多..: ) – Sudh