【发布时间】:2013-04-12 17:28:19
【问题描述】:
我在 Windows Phone 应用中有一个ListBox。在按钮操作中,我需要在名为 lb 的 ListBox 中的每个 ListBoxItem 上设置一个转换和名称。
我的数据源是
var items = new ObservableCollection<string>();
for (int i = 0; i < 10; ++i)
{
items.Add("Item " + i);
}
lb.ItemsSource = items;
我有一个代码可以为 ListBox 中的每个 ListBoxItem 添加一个 RenderTransform
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
}
它工作正常。问题是我首先需要在列表中插入和项目。当我在 for 循环之前调用 items.Insert(index,"test") 时,我得到一个异常,即当 i==index 时该项目为空。插入新项目时无关紧要,该项目总是为空。
我做错了什么?或者在尝试访问ListBoxItem 之前插入新项目时是否需要等待ListBox 的事件?
编辑:我提取代码并将其放入解决方案中:https://dl.dropboxusercontent.com/u/73642/PhoneApp2.zip。我首先将一个假项目插入到新解决方案中,然后将其淡出并使用动画将原始项目移动到该位置。
【问题讨论】:
-
I have a code to add a RenderTransform to each ListBoxItem in the ListBox你应该在 XAML 中这样做。这就是 XAML 的用途。非常不鼓励在基于 XAML 的技术中使用过程代码操作 UI 元素或其属性,并且会引入此类错误以及各种可维护性问题。 -
我不这么认为。有绑定时如何在 XAML 中设置 ListBoxItem 的 Name 或 RenderTransform?
-
你要这个名字干什么??
RenderTransform可以使用Style TargetType="ListBoxItem"应用。 -
我有一个 StoryBoard 引用了 2 个项目的名称,这些项目应该使用动画进行切换。所以我想迭代这些项目,将这两个名称设置为这些项目并运行 StoryBoard
-
发布您的完整代码和 XAML。否则都是猜测。
标签: c# windows-phone-7 xaml windows-phone-8