#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 работает для меня должным образом