WPF退出"掉线" Combobox,项目不再可编辑?

时间:2014-10-03 11:51:26

标签: wpf drop-down-menu combobox

我有一个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;

我必须管理意外的递归调用。

1 个答案:

答案 0 :(得分:0)

所以,就在这里。

你有2个ComboBoxes。如果您打开一个然后直接点击另一个,焦点将移动到第二个组合框下拉列表。

如果对第一个组合框进行任何更改,则更改将不会对样式生效(下拉调整大小)直到从第二个组合框下拉项目中释放焦点。虽然项目更改将生效,但调整大小不会。

要释放焦点,您需要打开第二个combox并更改所选的索引,如下所示:

    int sel = ComboBoxTwo.SelectedIndex;
    ComboBoxTwo.IsDropDownOpen = true;
    ComboBoxTwo.SelectedIndex = -1;
    ComboBoxTwo.IsDropDownOpen = true;
    ComboBoxTwo.SelectedIndex = sel;

10个小时的调试。 5个小时的研究。我找到的第一个解决方案。它可能很脏,但我可以找到它。