ListBox滚动,高度可变

时间:2012-12-22 18:30:09

标签: silverlight windows-phone-7 xaml

我有ListBox滚动的问题。每次我有更多的项目,而不是可以在屏幕上显示,我尝试滚动列表,它会自动回到顶部。我发现这可以通过设置ListBox的固定高度来修复。 但是,我需要动态地将项目添加到列表中,因此高度会发生变化。

列表框位于嵌套在数据透视表中的网格的第二行。

如何使用XAML动态设置列表框的高度,或者实现不总是捕捉到顶部的滚动效果,从而阻止我阅读/编辑底部的项目?

这是XAML:

<Grid x:Name="LayoutRoot">
 ...
    <controls:Pivot Title="Malts">
        <controls:PivotItem Header="Gravity" Name="GravityPivot">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>


                <Grid> some more controls in row 0</Grid>
                <Grid
                    Grid.Row="1">  
                    <ListBox
                 VerticalAlignment="Stretch"         
                 ItemsSource="{Binding ItemList}" 
                    Padding="10,10,0,10"
                    ItemContainerStyle="{StaticResource ListBoxItemStyle}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <TextBlock 
                                    Style="{StaticResource PhoneTextExtraLargeStyle}" 
                                    Text="{Binding Name}" 
                                    VerticalAlignment="Bottom"/>

                                    <StackPanel>
                                        <StackPanel 
                                        Orientation="Horizontal" >

                                            <TextBlock
                                                Text="{Binding Amount, Converter={StaticResource WeightConverter},StringFormat=' {0:f2}'}" 
                                                Margin="10,0,5,0"
                                                Style="{StaticResource PhoneTextNormalStyle}"/>
                                            <TextBlock
                                                Text="{Binding ., Converter={StaticResource UnitExtension}, ConverterParameter='Weight'}"
                                                Style="{StaticResource PhoneTextNormalStyle}"/>
                                        </StackPanel>
                                    </StackPanel>

                                    <toolkit:ContextMenuService.ContextMenu>
                                        <toolkit:ContextMenu>
                                            <toolkit:MenuItem                                                 
                                            Header="Edit"
                                            Command="{Binding ElementName=MaltList, Path=DataContext.EditCommand}"
                                            CommandParameter="{Binding}"/>
                                            <toolkit:MenuItem 
                                            Header="Remove"
                                            Command="{Binding ElementName=MaltList, Path=DataContext.RemoveCommand}"
                                            CommandParameter="{Binding}"/>
                                        </toolkit:ContextMenu>
                                    </toolkit:ContextMenuService.ContextMenu>
                                </StackPanel>

                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </Grid>
            </Grid>
        </controls:PivotItem>

谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个,应该解决你的问题;

<ListBox>

            <!-- You want this part... -->
            <ListBox.Template>
                <ControlTemplate>
                    <ScrollViewer HorizontalScrollBarVisibility="Auto"
                                  VerticalScrollBarVisibility="Auto">
                        <ItemsPresenter/>           
                    </ScrollViewer>         
                </ControlTemplate>      
            </ListBox.Template>

</ListBox>