2011-01-06 94 views
3

我正在处理内部使用组合框的自定义控件。C#WPF - 组合框

我的问题是,当组合框被关注并且下拉打开时,它似乎将焦点放在整个控件上。我想自动突出显示掉落的第一个项目,但现在必须按下Down键才能这样做。

有没有办法以编程方式突出显示组合框中的第一个项目(将只读IsHighlighted属性设置为true)?我相信ComboBox中的IsHighlight的概念与Focus不同。另外,我通过ItemsSource绑定,所以我没有引用ComboBoxItems。

+0

所以你想要第一个项目突出显示,而不是所选的项目? – Stefan 2011-01-06 22:35:45

+0

此时没有选定的项目。当ComboBox被关注并且下拉菜单打开时,我需要突出显示第一个ComboBoxItem,以便您可以使用下拉菜单中的向上/向下箭头键。现在,您必须在第一个项目高亮显示之前将其按下。 – jonathanpeppers 2011-01-06 23:53:24

+0

对不起,没有记得combobox不需要有选定的项目,我总是有:-)嗯,一直在看它,但找不到解决方案。我试着发送关键笔画,但即使这样也行不通... – Stefan 2011-01-07 05:55:14

回答

3

这是一种做法,虽然它可能不包括所有情况 - 但你没有提供太多的细节(例如,会发生什么当你已经选择了一个元素时,你还想要选择列表中的第一个元素吗?只有在组合框没有选择的时候,下面的代码才会突出显示第一个元素,为了使它始终选择第一个元素,DropDownOpened事件也应该处理)。

public MainWindow() 
{ 
    InitializeComponent(); 
    combobox.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged); 
} 

void ItemContainerGenerator_StatusChanged(object sender, EventArgs e) 
{ 
    if (combobox.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) 
    { 
     (combobox.ItemContainerGenerator.ContainerFromIndex(0) as ComboBoxItem).Focus(); 
    } 
} 

(希望我理解正确,这就是你想要做的)。

0

它可能不是你正在寻找的,但是如果你设置mycombo.SelectedIndex = 0,那么mycombo.IsDropDownOpen = True它应该打开它并选择第一个项目。它将突出显示,但也将是组合框中的值。我不确定这是不是所期望的效果虽然..