C#WPF-组合框

C#WPF-组合框,c#,.net,wpf,combobox,itemssource,C#,.net,Wpf,Combobox,Itemssource,我正在处理一个自定义控件,它在内部使用一个组合框 我的问题是,当组合框聚焦并且下拉列表打开时,它似乎聚焦整个控件。我想自动突出显示drop溺水中的第一项,但现在您必须按下向下键才能这样做 是否有方法以编程方式高亮显示组合框中的第一项(将readonly IsHighlighted属性设置为true)?我相信组合框中的IsHighlight的概念与焦点不同。另外,我是通过ItemsSource绑定的,因此我没有ComboBoxItems的引用。这可能不是您想要的,但是如果您设置mycombo.Se

我正在处理一个自定义控件,它在内部使用一个组合框

我的问题是,当组合框聚焦并且下拉列表打开时,它似乎聚焦整个控件。我想自动突出显示drop溺水中的第一项,但现在您必须按下向下键才能这样做


是否有方法以编程方式高亮显示组合框中的第一项(将readonly IsHighlighted属性设置为true)?我相信组合框中的IsHighlight的概念与焦点不同。另外,我是通过ItemsSource绑定的,因此我没有ComboBoxItems的引用。

这可能不是您想要的,但是如果您设置mycombo.SelectedIndex=0,那么mycombo.IsDropDownOpen=True,它应该打开它并选择第一个项目。它将高亮显示,但也将是组合框中的值。我不确定这是否不是理想的效果。这里有一种方法,虽然它可能不涵盖所有情况,但您没有提供太多的细节(例如,当已经选择了一个元素时会发生什么?是否仍要选择列表中的第一个元素?只有当组合框中没有选择时,下面的代码才会突出显示第一个元素。要使其始终选择第一个元素,还应处理
下拉菜单打开的
事件)


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

是的,我不想让组合框选择,只想选择“焦点”/“石灯”要在第一个ComboBoxItem上。因此,您希望突出显示第一个项目而不是选定的项目?此时没有选定的项目。当ComboxBox聚焦且下拉列表打开时,我需要突出显示第一个ComboxItem,以便您可以使用下拉列表中的向上/向下箭头键。现在,您必须在第一个单击之前单击向下em突出显示。啊,对不起,我不记得combobox不需要有一个选定的项目,我总是:-)嗯,看了一会儿,但找不到解决方案。我试着发送按键,但即使这样也不起作用……是的,发送一个向下的按键做了一些疯狂的事情,似乎打破了组合框的IsHighlight逻辑。我将尝试@Andrei的答案。这是可行的,我将ComboBoxItem存储在一个成员变量中,并且只在适当的时候调用Focus。现在唯一的问题是,如果您一直按下,ScrollViewer不会自动滚动。如果我取出此代码,ScrollViewer将按预期工作。您具体何时按下向下键?下拉列表何时打开?我只是做了一个快速测试,它似乎对我有效,按下卷轴没有任何问题。也许你的案例比我的100个字符串的简单组合框更复杂?我想我的案例更复杂一些。虽然我认为我最终会用您的解决方案解决问题,但我将您标记为答案。在我的最终解决方案中,我使用您的方法获取生成的ComboBoxItem,然后手动引发MouseEnter事件以使其正常工作。调用Focus()导致我的情况出现问题。
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();
    }
}