.net 组合框下拉列表中的奇怪问题
我再一次在WPF中找不到一个简单UI问题的简洁解决方案。我希望每当组合框获得焦点时,组合框下拉列表都会出现。所以我在“关注焦点”活动中写了这篇文章:.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
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属性需要调整???。这太奇怪了,我在发布代码之前测试了该代码,尝试打开一个只有两个控件的新项目,一个在带有默认属性的简单组合框之前,一个在之后,这就是我所做的哦我很抱歉我的不好…它工作了…问题是我放在中间的一个消息框…现在它工作得很好..非常感谢..)