当列表太长时,Listbox内的Datatemplate内的容器为null

时间:2010-12-02 07:50:34

标签: controls listbox windows-phone-7 datatemplate

我有一个列表框,其中包含一个带有Image和TextBlock控件的datatemplate。我想通过首先获取Grid Container

来获取ImageControl
<ListBox x:Name="NewsList" Margin="0,0,20,0" SelectionChanged="NewsList_SelectionChanged" />    
<DataTemplate>
            <Grid Width="400" Height="89">
            <Image HorizontalAlignment="Left" Width="64" x:Name="ImageThumbnail" Height="64" VerticalAlignment="Top" Margin="0,10,0,0" Source="http://vnexpress.net/Files/Subject/3B/A2/3B/15/top.jpg"/>
                <TextBlock Text="{Binding Title}" Margin="78,0,8,0" TextWrapping="Wrap" FontSize="26.667" Height="74" VerticalAlignment="Top"/>
            </Grid>
        </DataTemplate>
</ListBox>
for (int i = 0; i < feeds.Count; i++)
    var containerItem = list.ItemContainerGenerator.ContainerFromIndex(i);

当我使用feeds.Count设置NewsList.Items = Feeds超过23时,一些containerItem为null。如果它小于23,我永远不会得到一个空容器。

有谁知道原因是什么以及我如何解决它。如果我们可以用另一种方法来获取imageControl

2 个答案:

答案 0 :(得分:0)

我能看到的一件事是你的xaml看起来不对我。

不应该是这样的:

<ListBox x:Name="NewsList" Margin="0,0,20,0" SelectionChanged="NewsList_SelectionChanged">
  <ListBox.ItemTemplate>
    <DataTemplate>
        <Grid Width="400" Height="89">
        <Image HorizontalAlignment="Left" Width="64" x:Name="ImageThumbnail" Height="64" VerticalAlignment="Top" Margin="0,10,0,0" Source="http://vnexpress.net/Files/Subject/3B/A2/3B/15/top.jpg"/>
            <TextBlock Text="{Binding Title}" Margin="78,0,8,0" TextWrapping="Wrap" FontSize="26.667" Height="74" VerticalAlignment="Top"/>
        </Grid>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

除此之外,我不确定这是否会对你有所帮助。

答案 1 :(得分:0)

我的回答是编写一个新的ImageConverter,我们可以将其放入xaml文件中的标记中,我不再需要处理VisualTree,所以它可以正常工作