Listbox 数据透视项中的Wp7列表框滚动问题-Can';不要停留在最后一项上,固定高度没有帮助

Listbox 数据透视项中的Wp7列表框滚动问题-Can';不要停留在最后一项上,固定高度没有帮助,listbox,scroll,windows-phone-7,Listbox,Scroll,Windows Phone 7,我有一个简单的列表框,其中的项目比屏幕上显示的多。如果您滚动到最后一个项目,它会显示,但随后会从屏幕上掉下来-我无法将其保留在视图中。在谷歌搜索了一个小时后,这似乎是Listbox早期版本中的一个已知问题,但在最新的工具中似乎仍然如此。和似乎也有问题,但和或列表框级别没有区别。我看到WindowsPhoneDataBound应用程序模板中的列表框可以很好地滚动,没有高度 我还想要一个没有固定高度的解决方案,这样它就不需要景观方向的新状态 有什么建议吗 我的列表框位于数据透视项中的usercont

我有一个简单的列表框,其中的项目比屏幕上显示的多。如果您滚动到最后一个项目,它会显示,但随后会从屏幕上掉下来-我无法将其保留在视图中。在谷歌搜索了一个小时后,这似乎是Listbox早期版本中的一个已知问题,但在最新的工具中似乎仍然如此。和似乎也有问题,但和或列表框级别没有区别。我看到WindowsPhoneDataBound应用程序模板中的列表框可以很好地滚动,没有高度

我还想要一个没有固定高度的解决方案,这样它就不需要景观方向的新状态

有什么建议吗

我的列表框位于数据透视项中的usercontrol中:

        <controls:PivotItem x:Name="pivotItemSetup" Header="setup">
            <local:listBoxBlindsControl Margin="0,0,-12,0"/>
        </controls:PivotItem>

和用户控件:

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

更多信息:我从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>

而且它不起作用。。。那么这与数据透视项有关吗?
更新:我从数据透视项中取出了这段代码,它工作正常。。你知道如何在数据透视项中工作吗?

在数据透视项中的列表框周围放置一个网格。这将强制列表框进入滚动模式

<controls:PivotItem x:Name="pivotItemSetup" Header="setup">
  <Grid>
    <local:listBoxBlindsControl Margin="0,0,-12,0"/>
  </Grid>
</controls:PivotItem>

我需要这个精确的东西,结果只是将列表框的高度绑定到包含它的stackpanel的实际高度

所以你可能有

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

...
xaml继续
...
然后,确保stackpanel被设置为自动填充其所在的任何空间,listbox将根据其stackpanel容器的大小调整大小,并且滚动逻辑将正确启动


请注意,这主要适用于itemtemplate最终定义高度可能不同的项目时。如果它们的高度都一样,这通常不是问题。

我通过在存放项目的
项目面板中添加一个底部边距来解决这个问题:

<ListBox>
  <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel Margin="0,0,0,96" />
    </ItemsPanelTemplate>
  </ListBox.ItemsPanel>
  <ListBox.ItemTemplate>
    <DataTemplate>
    ...
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

...

我在所有xaml数据周围安装了一个Scrollviewer,列表框的滚动停止工作:

<ScrollViewer>
    <Grid>
        <control:Pivot>
            <control:PivotItem>
                <Grid>
                    <Listbox>
                    ...

...

移除ScrollViewer后,列表框项目的滚动再次正常工作。

谢谢,但它已经在网格(ContentPanel)中了?这就在数据透视项中。这对我来说很有效,因为我也有同样的问题。它启用了滚动,但似乎高度仍然不太正确,因为当我滚动列表框时,它并没有到达底部。似乎顶部的枢轴区域弄乱了高度测量?嗯。我似乎没有看到这种行为,尽管我不怀疑枢轴标题可能会弄乱滚动窗口。如果我硬编码高度,它会修复我的问题,这与你的问题非常相似。我刚刚在从列表框派生的用户控件的xaml中使用了Height=430。