友
我有一个WPF组合框。打开Combobox时,我会根据环境变量动态生成项目。所以基本上是一个绑定到动态变化列表的组合框。
一切正常,直到我退出组合框,下拉打开进入另一个控件(另一个组合框)。
当我重新打开第一个组合框时,当INDEED列表正在更改并且仍然绑定时,这些项目似乎已冻结并且不再绑定到列表。它几乎就像装订破了。
发生此事件时,我试图强行添加项目,但这也不起作用。我可以在后面的代码中看到组合框现在包含其他项目,但它不会出现在UI中包含它们。
这是什么黑魔法?有什么方法可以预防吗?这是某种类型的Stuck焦点问题吗?也许下拉列表没有重新调整大小?
我认为我已将其缩小到物理下拉列表并未重新调整新项目的大小。
编辑*
控件是动态生成的,所以我没有真正的硬代码来向您显示除此之外的内容。
private void CBControl_DropDownOpened(object sender, EventArgs e)
{
((ComboBox)sender).Items.Add("Option");
}
在这个事件中,我会向组合框中添加一个项目,虽然项目ARE被添加到列表中,但它们不会显示在UI中。
编辑2 *
我想通了,所以我有2个组合框,看起来第二个是钢化并且在下拉中保持焦点。 (奇怪的虫子)
为了解决这个问题,我需要在第二个组合框打开时更改第二个组合框的索引。
int sel = ComboBoxTwo.SelectedIndex;
ComboBoxTwo.IsDropDownOpen = true;
ComboBoxTwo.SelectedIndex = -1;
ComboBoxTwo.IsDropDownOpen = true;
ComboBoxTwo.SelectedIndex = sel;
我必须管理意外的递归调用。
答案 0 :(得分:0)
所以,就在这里。
你有2个ComboBoxes。如果您打开一个然后直接点击另一个,焦点将移动到第二个组合框下拉列表。
如果对第一个组合框进行任何更改,则更改将不会对样式生效(下拉调整大小)直到从第二个组合框下拉项目中释放焦点。虽然项目更改将生效,但调整大小不会。
要释放焦点,您需要打开第二个combox并更改所选的索引,如下所示:
int sel = ComboBoxTwo.SelectedIndex;
ComboBoxTwo.IsDropDownOpen = true;
ComboBoxTwo.SelectedIndex = -1;
ComboBoxTwo.IsDropDownOpen = true;
ComboBoxTwo.SelectedIndex = sel;
10个小时的调试。 5个小时的研究。我找到的第一个解决方案。它可能很脏,但我可以找到它。