【问题标题】:Hide and show calandar visibility when listview scrolled- xamarin.forms列表视图滚动时隐藏和显示日历可见性 - xamarin.forms
【发布时间】:2019-05-01 11:38:31
【问题描述】:

我有一个 xamarin.forms 应用程序,其中包含顶部的日历视图和下方的列表视图。

我想要实现的是,当该日历视图下的列表视图向下滚动时,日历应该隐藏,以便列表视图占据整个屏幕。当列表视图向上滚动时,日历应该重新出现到以前的状态。这可能吗使用 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;
    }
}

不知何故它不起作用。任何帮助表示赞赏。在此先感谢。

【问题讨论】:

  • 我会尝试分别测试这两个功能。当您期望它(在您的列表视图中向下滚动)时,您可以在 Handle_ItemAppearing 中打断点吗?你能手动隐藏你的日历吗?通过设置将 IsVisible 设置为 false 的计时器?
  • @Mouse On Mars 兄弟我可以手动隐藏日历视图。但是它会为整个日历空间留下一个白屏。列表视图仍在其位置,而不是整个区域
  • @AndroDevil 我可以知道你用的是哪个日历吗?
  • @PrissyEve 嗨,我用过同步压延机
  • syncfusion 是付费日历还是免费的

标签: listview xamarin.forms


【解决方案1】:

你可以尝试把日历放到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>

检查它是否符合您的要求。

【讨论】:

  • 它有效,但我收到错误 System.ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。参数名称:索引
  • 你应该检查listView的itemSource。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2015-05-25
  • 2011-04-04
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多