.net Stacklayout内部ScrollView不工作

edqdpe6u  于 2023-03-31  发布在  .NET
关注(0)|答案(2)|浏览(94)

我试图滚动时,我专注于文本字段,但它不工作。如果用户在文本字段写任何东西。它应该滚动。

<ContentPage.Content>

          <StackLayout  BackgroundColor="{StaticResource 00dp}">
    <Frame BorderColor="Transparent" VerticalOptions="FillAndExpand" Margin="10,20,10,20" Padding="0" BackgroundColor="{StaticResource 02dp}" Grid.Row="0" CornerRadius="20" >
        <ScrollView VerticalScrollBarVisibility="Always"  HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="{StaticResource 02dp}">

            <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">

                <Grid  Margin='20' RowSpacing="0" ColumnSpacing="0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>

                    </Grid.RowDefinitions>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="10*"/>
                        <ColumnDefinition Width="90*"/>

                    </Grid.ColumnDefinitions>

                   <-- more controls -->

                </Grid>

            </StackLayout>

        </ScrollView>
    </Frame>

</StackLayout>

</ContentPage.Content>

fnvucqvd

fnvucqvd1#

我不知道这是否回答了你的问题,但也许你应该看看ScrollView作为根布局的ScrollViewer文档。
在您的例子中,将ScrollViewer放在StackLayout中将删除ScrollViewer的所有用途。因为StackLayout将增长以适应其所有子元素的大小,这意味着它将占用所有空间而没有任何限制或需要滚动。您应该将ScrollViewer作为页面的根元素,以便将其内容限制为页面大小。

<ContentPage.Content>
    <ScrollView VerticalScrollBarVisibility="Always"  HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="{StaticResource 02dp}">
        <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
            <Grid  Margin='20' RowSpacing="0" ColumnSpacing="0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>

                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="10*"/>
                    <ColumnDefinition Width="90*"/>
                </Grid.ColumnDefinitions>

               <-- more controls -->

            </Grid>
        </StackLayout>
    </ScrollView>
</ContentPage.Content>
k5ifujac

k5ifujac2#

根据你的描述,这可能是一个已知的问题,在下面的链接中被跟踪,你可以在那里跟进。我还注意到你已经在Github上打开了Inside Stacklayout ScrollView not working #4176,你可以在那里继续跟进。
https://github.com/dotnet/maui/issues/12452
作为目前的替代解决方案,您可以将ScrollView作为AbsoluteLayout的直接子节点,如下所示:

<AbsoluteLayout >
      <ScrollView
              AbsoluteLayout.LayoutFlags="All"
              AbsoluteLayout.LayoutBounds="0,0,1,1">
            <StackLayout Padding="10,10,10,300">
               
                      <-- more controls -->

            </StackLayout>
      </ScrollView>
</AbsoluteLayout>

相关问题