3

我正在开发一个内部使用 ComboBox 的自定义控件。

我的问题是当 ComboBox 聚焦并打开下拉菜单时,它似乎聚焦整个控件。我想自动突出显示下拉菜单中的第一个项目,但现在你必须按下向下键才能这样做。

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

4

2 回答 2

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

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

于 2011-01-07T11:02:15.170 回答
0

它可能不是您要查找的内容,但如果您设置 mycombo.SelectedIndex = 0 那么 mycombo.IsDropDownOpen = True 它应该打开它并选择第一个项目。它将突出显示,但也将是组合框中的值。我不确定这是否不是预期的效果..

于 2011-01-06T17:13:48.510 回答