我有一个使用CollectionView的XAML表单。我将视图绑定到一个日期对象集合。我在代码隐藏中设置SelectedItem,它按预期工作。然后我尝试在代码隐藏中使用ScrollTo,但它总是在页面加载后显示集合中的第一个项目。页面加载后,我连接了一个图像以激发ScrollTo事件,它按预期工作。以下是我的代码。提前感谢您的帮助!
'''
for (int i = 0; i < 31 ; i++)
{
ScheduleDate date = new ScheduleDate();
date._Date = dt.AddDays(i);
colDates.Add(date);
}
cvDate.ItemsSource = colDates;
cvDate.SelectedItem = colDates[10];
cvDate.ScrollTo(cvDate.SelectedItem, null, ScrollToPosition.Start, true)
'''
XAML表单
'''
<CollectionView x:Name="cvDate" Grid.Row="0" Grid.Column="1"
SelectionMode="Single" >
<CollectionView.ItemsLayout>
<LinearItemsLayout Orientation="Horizontal" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding Description}"
FontAttributes="Bold"
FontSize="Large"
HorizontalOptions="Center"
VerticalOptions="Center"
/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
'''
编辑:
我连接了OnCollectionViewScrolled事件,当从OnAppearing()执行以下代码行时
cvDate.滚动到(cvDate.选定项,空,滚动到位置.开始,假);
OnCollectionViewScrolled没有被调用。但是,当我从按钮单击事件执行同一行代码时,OnCollectionViewScrolled被激发。
2条答案
按热度按时间bis0qfac1#
我不知道你的
Description
和_Date
是什么,我举个简单的例子供你参考。1.触发OnAppearing重写方法中的ScrollTo:
1.使用按钮单击方法触发ScrollTo:
完整代码:
截图:
更新日期:
pn9klfpd2#
我相信至少在UWP上,你不能滚动到一个元素,直到它实际上被UI加载。
在这种情况下,您可以使用CollectionView自定义呈现器来解决此问题。
你可以覆盖
ItemsViewRenderer.ScrollTo
函数并延迟滚动直到目标元素被加载,要知道何时发生,你可以注册到ListViewBase.ContainerContentChanging
事件。