2011-01-15 7 views
0

Ich bemerkte ein sehr seltsames Verhalten: in meinem Windows Phone 7 Ich habe eine ListBox, die alles von 1-2 bis 2-300 Elemente enthalten kann. Ich bemerkte, dass das OnSelectionChanged-Ereignis nicht ausgelöst wird, wenn die Anzahl der Elemente groß ist (nicht sicher über die Anzahl, aber sicher> 150 Elemente).ListBox OnSelectionChanged Ereignis funktioniert nicht mehr mit "vielen" Elementen

Dies ist die XAML meiner Listbox

<ListBox ItemsSource="{Binding Path=Posts}" ItemTemplate="{StaticResource IconsWithText}" 
     ScrollViewer.VerticalScrollBarVisibility ="Disabled" 
     SelectionChanged="ListBox_SelectionChanged" > 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

Und die Vorlage für die ItemTemplate ist:

<DataTemplate x:Name="IconsWithText"> 
    <Grid x:Name="ThumLink" Width="160" Height="140" Margin="10" Background="#FF666666"> 
     <Image Source="Resources/Images/All.png" Visibility="{Binding Path=VisibilityAll}" /> 
     <Image delay:LowProfileImageLoader.UriSource="{Binding Picture}" 
       Visibility="{Binding Path=VisibilityPic}" 
       Stretch="UniformToFill" VerticalAlignment="Top" HorizontalAlignment="Left" /> 
     <Border x:Name="border" VerticalAlignment="Bottom" Background="#d9ffffff" Height="62" BorderBrush="Black" Visibility="{Binding Path=VisibilityPic}" > 
      <TextBlock x:Name="textBlock" Text="{Binding Title}" VerticalAlignment="Top" TextWrapping="Wrap" MaxHeight="60" Style="{StaticResource PhoneTextSmallStyle}" 
       Foreground="Black" FontSize="20" Margin="4,1,4,0" Height="62"/> 
     </Border> 
    </Grid> 
</DataTemplate> 

Ist das ein Bug oder habe ich etwas falsch gemacht? Ich war in Debug und der Event-Handler wird nie aufgerufen, aber es funktioniert, wenn die Elemente nicht viele sind.

Simone

+0

Sie könnten uns die 'ListBox' XAML zeigen. Würden Sie zum Beispiel ein 'StackPanel' in seiner' ItemPanelTemplate' liefern, da dies bei so vielen Elementen fehlschlagen würde. – AnthonyWJones

+0

Den Code hinzugefügt ... ja, mit einem StackPanel ... warum scheitert es? Fehler? Irgendeine Problemumgehung? – CodeClimber

+0

Würde es ein virtualisingstackpanel besser machen? – CodeClimber

Antwort

1

Das Problem mit der Ebene StackPanel ist, dass alles visuelles Objekt wird die StackPanel erstellt und hinzugefügt werden, die in Bezug auf Speicher sehr teuer sein und kann über andere Grenzen in dem Rendering-System auslösen.

Versuchen Sie, zu ändern: -

<VirtualisingStackPanel Orientation="Horizontal" /> 

Bisher obwohl ich Ihr Problem mit 300 Stück habe nicht in der Lage zu reproduzieren, sogar eine einfache Stackpanel verwenden.

+0

versuchte das, aber scheint nichts zu ändern – CodeClimber

+1

Auch musste VirtualizingStackPanel.VirtualizationMode = "Recycling" in der ListBox hinzufügen, damit es funktioniert mit meiner langen Liste von Objekten (jetzt wuchs es auf über 400 Objekte) – CodeClimber

Verwandte Themen