WP7 - 在外部 ScrollViewer 中滚动列表框 [英] WP7 - Scrolling ListBox in external ScrollViewer
问题描述
我的应用程序中有以下页面布局:
I have the following page layout in my application:
<Grid x:Name="ContentPanel"
Grid.Row="1">
<ScrollViewer x:Name="ScrollViewer1"
MaxHeight="600"
VerticalAlignment="Top"
HorizontalAlignment="Stretch">
<StackPanel x:Name="StackPanel1" >
<TextBlock x:Name="TextBlock1" />
<toolkit:ListPicker x:Name="ListPicker1" />
<TextBlock x:Name="TextBlock2" />
<TextBox x:Name="TextBlock3" />
<TextBlock x:Name="TextBlock4" />
<StackPanel x:Name="StackPanel2" >
<TextBlock x:Name="TextBlock5" />
<Image x:Name="Image1"/>
</StackPanel>
<ListBox x:Name="ListBox1">
<!--Customize the ListBox template to remove the built-in ScrollViewer-->
<ListBox.Template>
<ControlTemplate>
<ItemsPresenter />
</ControlTemplate>
</ListBox.Template>
<ListBox.ItemTemplate>
<DataTemplate>
<!-- .... -->
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment"
Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</StackPanel>
</ScrollViewer>
</Grid>
我添加了一个外部 ScrollViewer
而不是使用 ListBox
,因为没有它 ListBox
上面的东西占用了太多空间并且没有留出足够的空间来查看 ListBox
内容.
I added an external ScrollViewer
instead of the using the ListBox
's because without it the stuff above the ListBox
was taking too much room and not leaving enough space to view the ListBox
contents.
现在,问题是如果我在 ListBox
的末尾添加一个项目,ScrollIntoView
方法将不起作用.所以我需要使用 ScrollViewer
的 ScrollToVerticalOffset
方法.
Now, the problem is if I add an item to the end of the ListBox
the ScrollIntoView
method does not work. So I need to use the ScrollViewer
's ScrollToVerticalOffset
method.
当用户单击应用程序栏上的按钮时,我将新项目添加到绑定到 ListBox
的 ObservableCollection
.如何计算要传递给 ScrollViewer.ScrollToVerticalOffset
的值?
I'm adding the new item to an ObservableCollection
that is bound to the ListBox
when the user clicks a button on the application bar. How can I calculate the value to be passed to ScrollViewer.ScrollToVerticalOffset
?
感谢您的帮助!
推荐答案
您可以找到 ListBox 生成的用于托管您的元素的容器.一旦你有了这个容器,你就可以找到它相对于滚动查看器的位置:
You can find the container that the ListBox has generated to host your element. Once you have this container, you can find its position relative to the scrollviewer:
var newItem = // the item you just added to your listbox
// find the ListBox container
listBox.UpdateLayout()
var element = listBox.ItemContainerGenerator.ContainerFromItem(newItem) as FrameworkElement;
// find its position in the scroll viewer
var transform = element.TransformToVisual(ScrollViewer);
var elementLocation = transform.Transform(new Point(0, 0));
double newVerticalOffset = elementLocation.Y + ScrollViewer.VerticalOffset;
// scroll into view
ScrollViewer.ScrollToVerticalOffset(newVerticalOffset);
希望有帮助
这篇关于WP7 - 在外部 ScrollViewer 中滚动列表框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!