嘿,伙计们,我在Silverlight 3的ItemContainerGenerator上遇到了问题。
在派生的自定义ListBox中,我添加了以下处理程序:
ItemContainerGenerator.ItemsChanged += new ItemsChangedEventHandler(ItemContainerGenerator_ItemsChanged);每次物品变了,我都会接到回电。到目前为止还不错。
现在,在ItemContainerGenerator_ItemsChanged中,我想做不同的事情,取决于这样的操作:
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
Debug.WriteLine("items added");
break;
case NotifyCollectionChangedAction.Remove:
Debug.WriteLine("items removed");
break;
case NotifyCollectionChangedAction.Replace:
Debug.WriteLine("items removed");
break;
case NotifyCollectionChangedAction.Reset:
Debug.WriteLine("items reset, itemscount:" + this.Items.Count);
CalcMaxColumnWidths();
break;
default:
break;
}到现在为止一切都很顺利。在CalcMaxColumnWidths()中,当操作被重置时,我调用它,我执行以下操作:
foreach (ListBoxItem item in ItemsControlExtensions.GetContainers(this))
{ //some code here }这里有个问题:
我试图使用GetContainers()方法获得的容器返回null,尽管Items.Count是正确的值(60)。
在WPF中有一个ItemContainerGenerator.Status,所以我们可以等到设置完成后再对容器进行迭代。
我怎样才能在Silverlight中解决这个问题?(没有计时器!)
谢谢你的帮忙!
发布于 2009-09-04 09:19:28
我没有执行ListBox本身的所有魔术,而是创建了一个自定义面板,并将其用作ItemPanel。在小组的度量和安排周期中,我现在计算列宽。在这些循环中,已经创建了所有容器。问题解决了。
但是,ItemContainerGenerator中缺少这种状态还是很糟糕的。
https://stackoverflow.com/questions/1205337
复制相似问题