开发者

ListBox OnSelectionChanged event stops working with "many" items

I noticed a very strange behavior: in my windows phone 7 I have a ListBox that can contain anything from 1-2 to 2-300 items. I noticed that when the number of items is big (not sure about the number but for sure >150 items) the OnSelectionChanged event is not raised.

This is the XAML of my 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>

And the template for the ItemTemplate is:

<DataTemplate x:Name="IconsWithText">
    <Grid x:Name="ThumLink"  Width="160" Height="140" Margin="10" Background="#FF666666">开发者_如何学JAVA;
        <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>

Is this a bug or did I do something wrong? I was in debug and the event handler never gets called, but it works when the items are not many.

Simone


The problem with using the plain StackPanel is that all visual object will be created and added to the StackPanel which will be very expensive in terms of memory and may trip over other limits in the rendering system.

Try changing to:-

<VirtualisingStackPanel Orientation="Horizontal" />

So far though I've not been able to reproduce your problem with 300 items even using a plain StackPanel.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜