ListBox OnSelectionChanged事件停止使用“很多”项

时间:2011-01-15 22:03:16

标签: windows-phone-7 listbox

我注意到一种非常奇怪的行为: 在我的Windows Phone 7中,我有一个ListBox,可以包含1-2到2-300个项目。 我注意到,当项目数量很大(不确定数字但确定> 150项)时,不会引发OnSelectionChanged事件。

这是我列表框的XAML

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

ItemTemplate的模板是:

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

这是一个错误还是我做错了什么?我在调试中,事件处理程序永远不会被调用,但是当项目不多时它就可以工作。

西蒙

1 个答案:

答案 0 :(得分:1)

使用普通StackPanel的问题是所有可视对象都将被创建并添加到StackPanel,这在内存方面将非常昂贵,并且可能会在渲染系统中超过其他限制

尝试更改为: -

<VirtualisingStackPanel Orientation="Horizontal" />

到目前为止,即使使用普通的StackPanel,我也无法使用300个项目重现您的问题。