我在Windows Phone应用程序中有ListBox
。在按钮操作中,我需要在名为lb
的ListBox
中的每个ListBoxItem
上设置转换和名称。在插入之后ItemContainerGenerator.ContainerFromIndex返回null
我的数据源是
var items = new ObservableCollection<string>();
for (int i = 0; i < 10; ++i)
{
items.Add("Item " + i);
}
lb.ItemsSource = items;
我有一个代码为RenderTransform
ListBox中的
for (int i = 0; i < items.Count;++i)
{
var item = this.lb.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
item.RenderTransform = new CompositeTransform();
item.Name = i.ToString() //needed for storybord
//another stuff
}
添加到每个ListBoxItem
,它工作正常。问题是我首先需要插入并将项目添加到列表中。当我在for循环之前调用items.Insert(index,"test")
时,出现i==index
时产品为空的异常。插入新项目时无关紧要,我总是为该项目获取空值。
我在做什么错?或者在我尝试访问ListBoxItem
之前插入新项目时,是否需要等待ListBox
的事件?
编辑:我提取了代码并将其放入一个解决方案:https://dl.dropboxusercontent.com/u/73642/PhoneApp2.zip。我首先在新解决方案中插入一个假项目,将其淡入淡出,并使用动画将原始项目移动到该位置。
'我有一个代码添加一个RenderTransform到列表框中的每个ListBoxItem你应该这样做在XAML。这就是XAML的用途。在基于XAML的技术中使用过程代码来操作UI元素或它们的属性是非常令人沮丧的,并且引入了这些类型的错误以及所有类型的可维护性问题。 –
我不这么认为。如何在绑定时在XAML中设置ListBoxItem的Name或RenderTransform? –
你想要什么名字? 'RenderTransform'可以通过'Style TargetType =“ListBoxItem”'应用。 –