2010-12-02 33 views
0

J'ai une listbox qui contient un datatemplate avec le contrôle Image et TextBlock à l'intérieur. Je veux obtenir le ImageControl par obtenir d'abord la grille ContainerLe conteneur à l'intérieur de Datatemplate à l'intérieur de Listbox est null lorsque la liste est trop longue

<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); 

Et quand je mets les NewsList.Items = avec feeds.Count est Fils d'au plus 23, une partie de la containerItem est nulle. Si elle est inférieure à 23, je n'obtiens jamais un conteneur nul.

Est-ce que quelqu'un sait quelle est la cause et comment je peux le réparer. Si nous pouvons avoir un autre moyen d'obtenir le contrôle imageControl

Répondre

0

Ma réponse est d'écrire une nouvelle ImageConverter que nous pouvons mettre dans la balise dans le fichier XAML, je n'ai pas traiter VisualTree plus, donc il fonctionne

0

Une chose que je peux voir est que votre xaml ne me semble pas juste.

Ça ne devrait pas ressembler à ceci:

<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> 

Au-delà, je ne suis pas sûr que vous aidera totalement ou non.

+0

En regardant votre exemple, vous pouvez également pour nous le contrôle DeferredLoadListBox avec le contrôle LowProfileImage - http://blogs.msdn.com/b/delay/archive/2010/10/04/there-s-no-substitute-for-customer-feedback-improving-windows- téléphone-7-application-performance-maintenant-un-peu-facile-avec-lowprofileimageloader-and-deferredloadlistbox-updates.aspx – DevTheo

+0

Ne vous aide pas beaucoup mais merci pour votre aide – vodkhang