朋友们,
我有一个WPF组合框。打开组合框时,我将根据环境变量动态生成项目。因此,基本上,一个组合框绑定到一个动态变化的列表。
一切正常,直到我退出与下拉组合框中开放进入另一个控制(另一个组合框)。
当我重新打开第一个组合框时,项目似乎被冻结,并且当INDEED列表在更改并且仍然绑定时,它们不再绑定到列表。它几乎像装订一样破裂。
发生此事件时,我试图强行添加项目,但这也不起作用。我可以在后面的代码中看到,组合框现在包含其他项,但是在UI中却没有包含这些其他项。
这是什么黑魔法?有什么预防方法吗?这是某种“卡住”问题吗?也许下拉列表没有调整大小?
我认为我已将其范围缩小到物理下拉列表,而不是重新调整新项目的大小。
编辑*
这些控件是动态生成的,因此除此以外,我没有真正的硬代码向您展示。
private void CBControl_DropDownOpened(object sender, EventArgs e)
{
((ComboBox)sender).Items.Add("Option");
}
在此事件中,我将向组合框添加一个项目,尽管这些项目已添加到列表中,但它们不会显示在UI中。
编辑2 *
我弄清楚了,所以我有2个组合框,似乎第二个组合框正在固定并在下拉列表中保持焦点。(奇怪的错误)
为了修复它,我需要通过打开第二个组合框的索引来释放它。
int sel = ComboBoxTwo.SelectedIndex;
ComboBoxTwo.IsDropDownOpen = true;
ComboBoxTwo.SelectedIndex = -1;
ComboBoxTwo.IsDropDownOpen = true;
ComboBoxTwo.SelectedIndex = sel;
而且我不得不处理意外的递归调用。
所以,就在这里。
您有2个ComboBoxes。如果您打开一个,然后直接单击另一个,则焦点将移至第二个组合框下拉列表。
如果您对第一个组合框进行了任何更改,则更改将不会对样式(下拉框调整大小)生效,直到您从第二个组合框下拉菜单项中释放焦点为止。尽管项目更改将生效,但调整大小不会生效。
要释放焦点,您需要打开第二个combox并更改选定的索引,如下所示:
int sel = ComboBoxTwo.SelectedIndex;
ComboBoxTwo.IsDropDownOpen = true;
ComboBoxTwo.SelectedIndex = -1;
ComboBoxTwo.IsDropDownOpen = true;
ComboBoxTwo.SelectedIndex = sel;
10个小时的调试。5个小时的研究。我找到的第一个解决方案。它可能很脏,但是我能找到的全部。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句