C# combox 设置显示下拉菜单的第一项,如图。还有下拉选项的索引怎么回事,所索引为零是菜单的第一个选项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# combox 设置显示下拉菜单的第一项,如图。还有下拉选项的索引怎么回事,所索引为零是菜单的第一个选项相关的知识,希望对你有一定的参考价值。

原因:

控件失去焦点的时候也显示列表而不自己选了第一项回缩起来。

C# 设置ComboBox下拉框内容:

1.、设置下拉框属性为:


其中DropDownList属性只能从下拉框已有的内容进行选择,DropDown为可选可输入。

2、对下拉框进行初始化为:


294行表示默认的下拉框选项。

3、在下拉框事件中添加事件:


在函数中判断当前的选中选项。

参考技术A



参考技术B 初始化时:combox.SelectedIndex =0
0就是第一项,1就是第二项,依次类推
参考技术C 在WinForm中,默认SelectIndex=-1。要想在加载时显示第一项,设置在Load事件中设置SeletedIndex=0。在数据绑定中,是从0开始索引的。 参考技术D SelectedIndex =0

C# WPF - 组合框

【中文标题】C# WPF - 组合框【英文标题】:C# WPF - ComboBox 【发布时间】:2011-01-06 16:43:50 【问题描述】:

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

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

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

【问题讨论】:

所以你想突出显示第一个项目而不是选定的项目? 此时没有选中的项目。当 ComboBox 聚焦并打开下拉菜单时,我需要突出显示第一个 ComboBoxItem,以便您可以使用下拉菜单中的向上/向下箭头键。现在你必须在第一个项目被突出显示之前点击 Down。 啊抱歉不记得组合框不需要选择项,我一直有:-) 嗯,看了一段时间,但找不到解决方案。我尝试发送击键,但即使这样也没有用... 是的,发送 Down 按键会做一些疯狂的事情,似乎会破坏 ComboBox 的 IsHighlight 逻辑。我要试试@Andrei 的回答。 【参考方案1】:

这是一种方法,虽然它可能无法涵盖所有​​情况 - 但您没有提供太多细节(例如,当已经选择了一个元素时会发生什么?您还想选择第一个列表中的元素?下面的代码仅在组合框中没有选择时才会突出显示第一个元素。要使其始终选择第一个元素,还应处理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();
    

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

【讨论】:

这行得通,我将 ComboBoxItem 存储在一个成员变量中,并且只在适当的时候调用 Focus。现在唯一的问题是,如果您继续按下,则 ScrollViewer 不会自动滚动。如果我取出这段代码,ScrollViewer 会按预期工作。 你到底什么时候按下向下键?什么时候打开下拉列表?我刚刚做了一个快速测试,它似乎对我有用,按下滚动条没有任何问题。也许您的案例比我的包含 100 个字符串的简单组合框更复杂? 我的情况有点复杂,我猜。虽然我认为我最终会用你的解决方案解决这个问题,但我将你标记为答案。 在我的最终解决方案中,我使用您的方法来抓取生成的 ComboBoxItem,然后手动引发 MouseEnter 事件以使其工作。调用 Focus() 导致我的情况出现问题。【参考方案2】:

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

【讨论】:

是的,我不想选择 ComboBox,只是将“focus”/“IsHighlight”放在第一个 ComboBoxItem 上。

以上是关于C# combox 设置显示下拉菜单的第一项,如图。还有下拉选项的索引怎么回事,所索引为零是菜单的第一个选项的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF - 组合框

C# winform combox 下拉框选项过长,显示不全,怎么解决

c# 高手来帮帮忙ComboBox下拉菜单的问题

C#下拉菜单最后一项自定义的实现

c#里面,ComBox下拉框比较里面,是不是有这个值?

c#里面ComBox下拉框里面比较里面是不是有这个值