gpt4 book ai didi

wpf - WP7 - 在外部 ScrollViewer 中滚动列表框

转载 作者:行者123 更新时间:2023-12-01 23:55:09 25 4
gpt4 key购买 nike

我的应用程序中有以下页面布局:

<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 内容。

现在,问题是如果我将一个项目添加到 ListBox 的末尾,则 ScrollIntoView 方法不起作用。所以我需要使用 ScrollViewerScrollToVerticalOffset 方法。

我将新项目添加到当用户单击应用程序栏上的按钮时绑定(bind)到 ListBoxObservableCollection 中。如何计算要传递给 ScrollViewer.ScrollToVerticalOffset 的值?

感谢您的帮助!

最佳答案

您可以找到 ListBox 生成的用于托管您的元素的容器。一旦有了这个容器,您就可以找到它相对于滚动查看器的位置:

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

希望有帮助

关于wpf - WP7 - 在外部 ScrollViewer 中滚动列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4611185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com