gpt4 book ai didi

c# - 在开头插入项目时防止来自 "auto scrolling"的 LongListMultiSelector

转载 作者:行者123 更新时间:2023-11-30 13:07:04 25 4
gpt4 key购买 nike

我正在使用 LongListMultiSelector 来显示消息。最新消息位于底部 - 就像在 Messenger 中一样。我知道 ListHeaderTemplate 中有一个按钮,它允许我加载较早的消息并将它们插入列表的顶部 (ObservableCollection.Insert(0, item);)。

插入有效,但看起来列表自动滚动到最后插入的项目 - 它实际上不滚动,但感觉它滚动,因为插入后,显示新项目,但我宁愿寻找一个使项目可见的解决方案,它是插入新项目之前的第一个项目,我必须再次垂直滚动到新顶部才能再次到达列表标题。

有什么线索吗?

编辑 1

考虑,oldFirstItem 是当前的第一个项目,然后我在项目前面插入一个新项目。现在新项目成为第一个项目,并且由于滚动位置没有改变,新项目是可见的:感觉列表滚动到新插入的项目,但它只将项目 1 推到 n 下。我想要的是,它将所有新项目向上推 - 进入用户看不到的区域 - 并且 oldFirstItem 位于可见项目的顶部。使用 ScrollTo 使该列表跳转。

编辑 2我添加了一张图片,试图展示我想要实现的目标。红线上方的区域不可见。 enter image description here

最佳答案

为了让你继续前进,我尝试了一些但无法 100% 成功

这是一个有效的基本页面模板,它实际上可以满足您对消息的要求

<phone:PhoneApplicationPage >

<ScrollViewer x:Name="Scroll" VerticalAlignment="Bottom" Height="500" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<StackPanel VerticalAlignment="Bottom" >
<toolkit:LongListMultiSelector x:Name="DataList" ItemsSource="{Binding}" ScrollViewer.VerticalScrollBarVisibility="Disabled" VerticalAlignment="Bottom"
VirtualizingStackPanel.VirtualizationMode="Recycling"></toolkit:LongListMultiSelector>
</StackPanel>
</ScrollViewer>

</phone:PhoneApplicationPage>

这会降低新消息的数量,从而将列表拉高。滚动现在被禁用。您可以轻松地将 ScrollViewer 包含在网格中并添加上面的按钮(如您的图片所示)

现在进入按钮点击的代码

    Scroll.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
Scroll.ScrollToVerticalOffset(DataList.ActualHeight);

不幸的是,这会向上滚动列表,但是如果您再次触发第二行代码(例如通过单击按钮),ScrollToVerticalOffset 会起作用。因此,出于某种原因,ScrollToVerticalOffset 在更改 VerticalScrollBarVisibility 后无法立即工作。如果你能搞清楚这最后一部分,相信你的问题就迎刃而解了

关于c# - 在开头插入项目时防止来自 "auto scrolling"的 LongListMultiSelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20074723/

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