Xamarin.forms xamarin UWP中出现的项目的等效项
我有一个绑定到BitmapImage列表的ListView。 当我滚动浏览此列表时,我想获得当前图像的索引。 但是,我注意到itemseapping属性在UWP中不存在,但在Xamarin形式中存在。 如何获取视图中当前项的索引 谢谢Xamarin.forms xamarin UWP中出现的项目的等效项,xamarin.forms,xamarin.uwp,Xamarin.forms,Xamarin.uwp,我有一个绑定到BitmapImage列表的ListView。 当我滚动浏览此列表时,我想获得当前图像的索引。 但是,我注意到itemseapping属性在UWP中不存在,但在Xamarin形式中存在。 如何获取视图中当前项的索引 谢谢 <ScrollViewer Grid.Row="0" ZoomMode="{x:Bind ZoomMode, Mode=OneWay}" HorizontalScrollMode="Enabled" Horizon
<ScrollViewer Grid.Row="0" ZoomMode="{x:Bind ZoomMode, Mode=OneWay}" HorizontalScrollMode="Enabled" HorizontalScrollBarVisibility="Auto">
<ListView HorizontalAlignment="Center" ItemsSource="{x:Bind ImagePages, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="BitmapImage">
<Image Source="{x:Bind }" Margin="0 2" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
</ScrollViewer>
对于初学者,itemseapping属性不是您要寻找的行为。呈现列表项时,将激发Xamarin表单中ListView的ItemExaming事件。对于小列表,将立即为所有项目触发此事件。UWP中的等效事件是ListView.ChoosingItemContainer事件,该事件与ItemExaming事件类似,除非为列表中的所有项目触发ListView虚拟化。即使对于大型虚拟化列表,也会为数页的项目触发它 这不是你想要的。据我所知,您希望知道滚动列表时列表视图顶部可见的图像。下面是如何做到这一点 首先。摆脱ScrollViewer。ListView中已经有一个ScrollViewer
<ListView x:Name="listViewImage" Grid.Row="0" HorizontalAlignment="Center" ItemsSource="{x:Bind ImagePages, Mode=OneWay}"
Loaded="listViewImage_Loaded">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="BitmapImage">
<Image Source="{x:Bind }" Margin="0 2"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
在视图更改处理程序中,找到第一个可见的ListViewItem并在集合中获取其索引。这就是你想要的
private void Sv_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
ScrollViewer sv = sender as ScrollViewer;
GeneralTransform gt = sv.TransformToVisual(this);
Point p = gt.TransformPoint(new Point(0, 0));
List<UIElement> list = new List<UIElement>(VisualTreeHelper.FindElementsInHostCoordinates(p, sv));
ListViewItem item = list.OfType<ListViewItem>().FirstOrDefault();
if(item != null)
{
int index = listViewImage.IndexFromContainer(item);
Debug.WriteLine("Visible item at top of list is " + index);
}
}
private void Sv_ViewChanged(对象发送者,ScrollViewServiceChangedEventArgs e)
{
ScrollViewer sv=作为ScrollViewer的发送方;
GeneralTransform gt=sv.TransformToVisual(此);
点p=总转换点(新点(0,0));
列表=新列表(VisualTreeHelper.FindElementsInHostCoordinates(p,sv));
ListViewItem项=list.OfType().FirstOrDefault();
如果(项!=null)
{
int index=listViewImage.IndexFromContainer(项目);
Debug.WriteLine(“列表顶部可见项为”+索引);
}
}
没有“Xamarin.UWP”这样的东西-UWP应用程序只是一个UWP应用程序。@Jason,这意味着是一个由Xamarin表单项目生成的UWP应用程序。这确实是可能的。谢谢你的解决方案。我试试这个。
private void Sv_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
ScrollViewer sv = sender as ScrollViewer;
GeneralTransform gt = sv.TransformToVisual(this);
Point p = gt.TransformPoint(new Point(0, 0));
List<UIElement> list = new List<UIElement>(VisualTreeHelper.FindElementsInHostCoordinates(p, sv));
ListViewItem item = list.OfType<ListViewItem>().FirstOrDefault();
if(item != null)
{
int index = listViewImage.IndexFromContainer(item);
Debug.WriteLine("Visible item at top of list is " + index);
}
}