Xamarin.Forms Scrollview не будет прокручиваться

#c# #xaml #xamarin #xamarin.forms

#c# #xaml #xamarin #xamarin.forms

Вопрос:

Я создаю приложение, которое включает в себя Stacklayout внутри Scrollview. В обоих я определил ориентацию как вертикальную, а VerticalOptions как FillAndExpand . Как описано здесь:https://forums.xamarin.com/discussion/20945/scrollview-in-xaml Но приложение не будет прокручиваться.

 <ContentPage.Content>
    <AbsoluteLayout>
        <ScrollView Orientation="Vertical"
                    VerticalOptions="FillAndExpand">
            <StackLayout Margin="{StaticResource PageMargin}"
                         AbsoluteLayout.LayoutBounds="0.0, 0.0, 1.0, 1.0"
                         AbsoluteLayout.LayoutFlags="All"
                         Orientation="Vertical"
                         VerticalOptions="FillAndExpand">

                <Label Text="Lorem Ipsum..." />
                <!--Extra Labels-->
                <Label Text="Lorem Ipsum..." />

            </StackLayout>
        </ScrollView>

        <skia:SKCanvasView x:Name="BgCanvasView"
                           PaintSurface="OnBgCanvasViewPaintSurface"
                           AbsoluteLayout.LayoutBounds="0.0, 0.0, 1.0, 1.0"
                           AbsoluteLayout.LayoutFlags="All"
                           InputTransparent="True"/>
    </AbsoluteLayout>
</ContentPage.Content>
  

У вас есть какие-нибудь идеи, которые я мог бы попробовать?

Заранее благодарю вас.

РЕДАКТИРОВАТЬ: я понял, что это как-то связано с <AbsoluteLayout> . Я создал другой проект для тестирования этой проблемы. С тем же результатом AbsoluteLayout, что и в моем приложении. Но без этого StackLayout прокручивается, как и ожидалось. Поскольку мне необходим AbsoluteLayout, из-за фоновой графики, которую я рисую в SKCanvasView, пропустить ее — не вариант.

РЕДАКТИРОВАТЬ: Ну… Я разобрался с этим сам и сейчас чувствую себя немного глупо. <Scrollview> Отсутствовал AbsoluteLayout.layoutBounds и AbsoluteLayout.LayoutFlags

Ответ №1:

  • Вы движетесь в правильном направлении, только не забывайте, что если мы хотим, чтобы scroll-view прокручивался, то необходимо, чтобы содержимое scroll-view выходило за пределы scroll-view
  • в настоящее время ваши ScrollView и StackLayout оба находятся в AbsoluteLayout с AbsoluteLayout .layoutBounds = «All» это означает, что высота и ширина будут пропорциональны экрану или родительскому представлению.
  • Из-за этого StackLayout, который является дочерним элементом вашего ScrollView, никогда не будет превышать границ ScrollView, и ScrollView никогда не позволит вам прокручивать экран.

Пожалуйста, попробуйте следующий подход для реализации Scrollview, это может помочь

 <AbsoluteLayout>
    <StackLayout AbsoluteLayout.LayoutBounds = "0,0,1,1" AbsoluteLayout.LayoutFlags = "All">
       <ScrollView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
          <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"></StackLayout>
       </ScrollView>
    </StackLayout>
    <skia:SKCanvasView x:Name="BgCanvasView"
                       PaintSurface="OnBgCanvasViewPaintSurface"
                       AbsoluteLayout.LayoutBounds="0.0, 0.0, 1.0, 1.0"
                       AbsoluteLayout.LayoutFlags="All"
                       InputTransparent="True"/>
</AbsoluteLayout>
  

Я попробовал тот же код на своем компьютере, и scrollview работает для меня должным образом