在PivotItem WP7框滚动的问题 - 不能留在最后一个项目,固定的高度并没有帮助

Rod*_*ney 5 scroll listbox windows-phone-7

我有一个简单的列表框,其中包含的项目多于屏幕上的项目.如果你滚动到它显示的最后一项,但然后从屏幕上退回 - 我不能将它留在视野中.经过一个小时的谷歌搜索后,它似乎是Listbox早期版本中的一个已知问题,但在最新的工具中似乎仍然如此.固定高度虚拟化似乎也存在问题,但在项目级别或列表框级别设置高度没有任何区别.我看到WindowsPhoneDataBound应用程序模板中的列表框可以正常滚动,没有高度.

我还想要一个没有固定高度的解决方案,因此它不需要横向定向的新状态.

有什么建议吗?

我的列表框位于PivotItem中的usercontrol中:

        <controls:PivotItem x:Name="pivotItemSetup" Header="setup">
            <local:listBoxBlindsControl Margin="0,0,-12,0"/>
        </controls:PivotItem>
Run Code Online (Sandbox Code Playgroud)

和用户控制:

 <Grid x:Name="LayoutRoot" Background="Transparent">
        <ListBox x:Name="listBoxBlinds" ItemsSource="{Binding BlindSet.Blinds}" SelectionChanged="MainListBox_SelectionChanged" Height="500">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Height="80" Margin="0,0,0,17" Width="103">
                        <StackPanel Orientation="Horizontal"  Visibility="{Binding IsBreak, ConverterParameter=true, Converter={StaticResource boolToVisibility}}" VerticalAlignment="Top" d:LayoutOverrides="Width">
                            <TextBlock Text="{Binding LevelNumber, ConverterParameter='level \{0\} - ', Converter={StaticResource stringTextConverter}}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextExtraLargeStyle}" d:LayoutOverrides="Width"/>
                            <TextBlock Text="{Binding SmallBlind, ConverterParameter=\{0\}/, Converter={StaticResource stringTextConverter}}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextExtraLargeStyle}" d:LayoutOverrides="Width"/>
                            <TextBlock Text="{Binding BigBlind}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextExtraLargeStyle}" d:LayoutOverrides="Width"/>
                        </StackPanel>
                        <TextBlock x:Name="txtbreak" Text="break" TextWrapping="NoWrap" Margin="0,0,0,23" Style="{StaticResource PhoneTextExtraLargeStyle}" d:LayoutOverrides="Width, Height" Visibility="{Binding IsBreak, ConverterParameter=false, Converter={StaticResource boolToVisibility}}" Foreground="{StaticResource PhoneAccentBrush}" />
                        <StackPanel Orientation="Horizontal" Margin="0,0,0,23" VerticalAlignment="Bottom" d:LayoutOverrides="Width">
                            <TextBlock Text="{Binding MinutesPerBlind, ConverterParameter=\{0\} minutes, Converter={StaticResource stringTextConverter}}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextSubtleStyle}" d:LayoutOverrides="Width"/>
                            <TextBlock Text="{Binding Ante, ConverterParameter=\, \{0\} ante, Converter={StaticResource stringTextConverter}}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextSubtleStyle}" d:LayoutOverrides="Width" Visibility="{Binding Ante, ConverterParameter=0, Converter={StaticResource valueToVisibility}}"/>
                        </StackPanel>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

更多信息:我将WindowsPhoneDataBoundApp(可以工作)中的确切XAML复制并粘贴到我的usercontrol中,现在看起来像这样:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <ListBox x:Name="listBoxBlinds" Margin="0,0,-12,0" ItemsSource="{Binding BlindSet.Blinds}" SelectionChanged="MainListBox_SelectionChanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="0,0,0,17" Width="432">
                    <TextBlock Text="{Binding LevelNumber}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                    <TextBlock Text="{Binding SmallBlind}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

并且它不起作用......所以它与PivotItem有关吗? 更新:我从PivotItem中取出了这个代码并且它工作正常..所以任何想法如何让它在pivotitem中工作?

Dar*_*inH 2

我需要这个确切的东西,最终只是将列表框的高度绑定到包含它的堆栈面板的实际高度。

所以你可能有

<controls:PivotItem Header="Destinations" Margin="0,0,12,0" Name="pvtItemDestinations">
    <StackPanel Name="stkDestinations">
        <ListBox Name="lstDestinations" 
                 HorizontalContentAlignment="Stretch" 
                 Height="{Binding ElementName=stkDestinations, Path=ActualHeight, Mode=OneWay}">
            <ListBox.ItemTemplate>
                ...
                xaml continues
                ...
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
</controls:PivotItem>
Run Code Online (Sandbox Code Playgroud)

然后,确保将 stackpanel 设置为自动填充它所在的任何空间,然后列表框将调整大小到其 stackpanel 容器的大小,并且滚动逻辑将正确启动。

请注意,这主要适用于您的项目模板最终定义高度可能不同的项目时。如果它们的高度相同,通常不会有问题。