Xamarin.Forms - 如何动态更改 CarouselView 的高度?

Dan*_*ral 7 xamarin xamarin.forms

我有一个 CarouselView,我在其中调用具有单独且完全不同的视图的对象。

我的 ContentPage 拥有的唯一元素是 CarouselView 本身,以及上面带有渐变的底部栏(注意下图中的渐变)。

我已经这样做了,当页面的滚动空间变为 0 时(当我滚动到页面末尾时),渐变消失。

问题是,当我在 CarouselView 中的项目之间滑动时,CarouselView 始终保持调用的第一个 View 的高度。

这意味着,在比第一个高度更多的视图中,当向上滚动时(在最底部之后,因此不显示渐变)渐变只会在达到第一页的高度值时再次显示。

在高度小于第一个的视图中,页面将允许我向下滚动,直到达到第一页的高度值,即使页面上没有足够的元素甚至需要滚动。

本质上,我要问的是,是否有一种方法可以在每次滚动完成到 CarouselView 中的另一个视图时以某种方式“刷新”页面的高度,以更小的方式解决我的高度问题视图,以及我在较大视图中的梯度问题。

主要内容页面代码隐藏(渐变)

        public double ScrollingSpace
        {
            get
            {
                return MainScrollView.ContentSize.Height - MainScrollView.Height;
            }
            set { }
        }

        // Removes gradient when scroll is complete
        private void OnScrolled(object sender, ScrolledEventArgs e)
        {
            if (ScrollingSpace <= e.ScrollY) // Touched bottom
                EndPageGradient.SetValue(IsVisibleProperty, false); // the view is GONE, not invisible
            else
                EndPageGradient.SetValue(IsVisibleProperty, true);
        }

        // Removes gradient if page is not large enough to need scroll
        protected override void OnAppearing()
        {
            if (ScrollingSpace <= 0)
                EndPageGradient.SetValue(IsVisibleProperty, false); // the view is GONE, not invisible
        }
Run Code Online (Sandbox Code Playgroud)

主要内容页面 CarouselView XAML

                <CarouselView
                    ItemsSource="{Binding ViewList}"
                    Loop="False">

                    <CarouselView.ItemTemplate>
                        <DataTemplate>
                            <ContentView Content="{Binding .}" />
                        </DataTemplate>
                    </CarouselView.ItemTemplate>

                </CarouselView>
Run Code Online (Sandbox Code Playgroud)

主 ContentPage ViewModel(带有 CarouselView 视图的列表)

            ViewList = new List<ContentView>()
            {
                new Step1(),
                new Step2(),
                new Step3(),
                new Step4(),
                new Step5(),
                new Step6(),
                new Step7(),
                new Step8()
            };
Run Code Online (Sandbox Code Playgroud)

提前致谢!