滚动列表视图时隐藏和显示日历可见性-xamarin.forms

时间:2019-05-01 11:38:32

标签: listview xamarin.forms

我有一个xamarin.forms应用,该应用在顶部包含一个日历视图,在其下方包含一个列表视图。

enter image description here

我要实现的是隐藏在该日历视图下滚动到日历下方的列表视图时,以便该列表视图占据整个屏幕。当该列表视图向上滚动时,日历应重新显示为以前的状态。用xamarin,形式?

我的xaml

<Grid>
    <Grid.RowDefinitions>
         <RowDefinition Height="*"/>
         <RowDefinition Height="0.8*"/>
         <RowDefinition Height="0.25*"/>
    </Grid.RowDefinitions>
          <Calendar x:Name="Calendar"
           Grid.Row="0">
          </Calendar>   
       <ListView x:Name="listView"
              ItemAppearing="Handle_ItemAppearing"
              Grid.Row="1">
        <ListView.ItemTemplate>
            ...
        </ListView.ItemTemplate>
    </ListView>
    <StackLayout x:Name="stackLayout"
                 Grid.Row="2">
        <Button></Button>
        <Button></Button>       
        </StackLayout>
</Grid>

我的xaml.cs文件和尝试过的内容

public partial class MainPage : ContentPage
{
    public ObservableCollection<string> Items { get; set; } = new ObservableCollection<string>();
    int lastItemIndex;
    int currentItemIndex;

    public MainPage()
    {
        ...       
    }

    void Handle_ItemAppearing(object sender, ItemVisibilityEventArgs e)
    {
        string item = e.Item as string;
        currentItemIndex = Items.IndexOf(item);
        if (currentItemIndex > lastItemIndex)
        {
            Calendar.IsVisible = false;
        }
        else
        {
            Calendar.IsVisible = true;
        }
        lastItemIndex = currentItemIndex;
    }
}

以某种方式不起作用。感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

您可以尝试将日历放入listView的header

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="450"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <ListView x:Name="listView"
          Grid.Row="0">

        <!--put the listview here-->
        <ListView.Header>
            <Calendar x:Name="Calendar" >
        </ListView.Header>

        <ListView.ItemTemplate>
            <DataTemplate>
               ...
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <StackLayout x:Name="stackLayout"
             Grid.Row="1">
        <Button></Button>
        <Button></Button>
    </StackLayout>
</Grid>

检查是否符合您的要求。