我有一个带有ListView
的屏幕,其中显示了评论集合。另外,我有一个StackLayout
与ListView
的末尾重叠,后者有一个Entry
和一个Button
以添加新的注释。
我想根据StackLayout
的滚动方向来隐藏/显示此ListView
:
StackLayout
。StackLayout
。有人知道一种实现这种行为的方法吗?
谢谢!
答案 0 :(得分:4)
Xamarin.Forms ListView
提供了一个您可以订阅的OnItemAppearing
事件。通过此操作,您可以通过找到出现的项目的索引并将其与出现的最后一项进行比较来跟踪滚动方向。尝试这样的事情:
public partial class MainPage : ContentPage
{
public ObservableCollection<MyItemType> Items { get; set; } = new ObservableCollection<MyItemType>();
int lastItemIndex;
int currentItemIndex;
public MainPage()
{
...
listView.ItemAppearing += ListView_ItemAppearing;
}
void ListView_ItemAppearing(object sender, ItemVisibilityEventArgs e)
{
MyItemType item = e.Item as MyItemType;
currentItemIndex = Items.IndexOf(item);
if (currentItemIndex > lastItemIndex)
{
stackLayout.IsVisible = false;
}
else
{
stackLayout.IsVisible = true;
}
lastItemIndex = currentItemIndex;
}
}
编辑:闪烁实际上是由于ListView
的显示和隐藏时StackLayout
的大小已被调整,因此请确保ListView
的大小不会被调整。也许将ListView和StackLayout放置在网格中,以便在显示和隐藏StackLayout
时ListView
不会被调整大小,例如:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="35" />
</Grid.RowDefinitions>
<ListView x:Name="listView"
ItemsSource="{Binding Items}"
Grid.Row="0">
<ListView.ItemTemplate>
...
</ListView.ItemTemplate>
</ListView>
<StackLayout x:Name="stackLayout"
Grid.Row="1">
...
</StackLayout>
</Grid>
使用上述方法,不再发生闪烁。