Невозможно прокрутить Xamarin.Forms ScrollView, когда маленькие виды расположены сверху - PullRequest
2 голосов
/ 28 июня 2019

У меня есть изображение и несколько кнопок в верхней части AbsoluteLayout, наложенных на ScrollView.Между элементами есть много места, чтобы «дотянуться до» вида прокрутки и пролистать для прокрутки, но пролистывание до прокрутки не работает.Затем я попытался поместить их в сетку, как предложено здесь , но та же проблема.Что я тут не так делаю?

<ContentPage.Content>
    <AbsoluteLayout LayoutFlags="All" LayoutBounds="0,0,1,1" BackgroundColor="Default">
        <Grid AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <ScrollView x:Name="ScoreScrollView" Orientation="Horizontal" ScrollX="{Binding ScoreScrollX}" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" 
                    HorizontalScrollBarVisibility="Always" VerticalScrollBarVisibility="Never" BackgroundColor="White">
                <AbsoluteLayout LayoutFlags="HeightProportional" BackgroundColor="LightGray">
                    <AbsoluteLayout x:Name="ScoreContainer" LayoutFlags="All" LayoutBounds="0,0,1,0.75" BackgroundColor="White">
                        <skia:SKCanvasView x:Name="ScoreCanvas" PaintSurface="PaintScore" IgnorePixelScaling="True" Scale="1.0" 
                                       AbsoluteLayout.LayoutFlags="None"
                                       AbsoluteLayout.LayoutBounds="{Binding ScoreImageRect}"
                                       BackgroundColor="Default"
                                       />
                        <skia:SKCanvasView x:Name="ScoreOverlayCanvas" PaintSurface="PaintScoreOverlay" IgnorePixelScaling="True" Scale="1.0" 
                                       AbsoluteLayout.LayoutFlags="None"
                                       AbsoluteLayout.LayoutBounds="{Binding ScoreImageRect}"
                                       />
                    </AbsoluteLayout>
                    <AbsoluteLayout x:Name="VisualizationContainer" LayoutFlags="All" LayoutBounds="0,1,1,0.25"
                                BackgroundColor="Purple">
                        <skia:SKCanvasView x:Name="TimingViz" PaintSurface="PaintTiming" IgnorePixelScaling="True" Scale="1.0" 
                                   AbsoluteLayout.LayoutFlags="All"
                                   AbsoluteLayout.LayoutBounds="0,0,1,1"
                                   BackgroundColor="White"
                                   />
                    </AbsoluteLayout>
                </AbsoluteLayout>
            </ScrollView>
            <AbsoluteLayout LayoutFlags="All" LayoutBounds="0,0,1,1">
                <AbsoluteLayout x:Name="EvaluationStickyNote" LayoutFlags="None" LayoutBounds="32,0,150,150" Rotation="-15" 
                            IsVisible="False">
                    <Image Source="{Binding StickyNoteImage}" 
                       AbsoluteLayout.LayoutFlags="All"
                       AbsoluteLayout.LayoutBounds="0,0,1,1" />
                    <Label LineBreakMode="WordWrap" 
                       AbsoluteLayout.LayoutFlags="All"
                       AbsoluteLayout.LayoutBounds="0.5,0.5,0.8,0.8"
                       Text="{Binding EvaluationText}"
                       FontSize="20"
                       TextColor="Blue">
                    </Label>
                </AbsoluteLayout>
            </AbsoluteLayout>
            <StackLayout IsVisible="True" Orientation="Vertical" AbsoluteLayout.LayoutFlags="WidthProportional" AbsoluteLayout.LayoutBounds="0,0,1,32" BackgroundColor="Default">
                <StackLayout x:Name="TopButtons" Orientation="Horizontal" VerticalOptions="Start" HorizontalOptions="CenterAndExpand" BackgroundColor="Default">
                    <StackLayout IsVisible="False" Orientation="Horizontal" HorizontalOptions="Start">
                        <!--<Button Image="{Binding HomeIcon}" Clicked="Home"></Button>-->
                        <!--<Button Image="{Binding FeedbackIcon}" Clicked="FeedBack"></Button>-->
                    </StackLayout>
                    <StackLayout x:Name="MetronomeGroup" Orientation="Horizontal" HorizontalOptions="Center">
                        <Stepper x:Name="MetronomeStepper" Minimum="20" Maximum="300" Increment="2" Value="{Binding MetronomeBpm}"></Stepper>
                        <Entry Text="{Binding MetronomeBpmText}" Completed="MetronomeBpmEntry_OnTextChanged"></Entry>
                        <Label Text="bpm"></Label>
                        <ImageButton Source="{Binding MetronomeIcon}" Clicked="ToggleMetronome" Aspect="AspectFit" HeightRequest="32"></ImageButton>
                    </StackLayout>
                    <!--<Button Image="{Binding HamburgerIcon}" Clicked="ToggleHamburger"></Button>-->
                </StackLayout>
                <Label x:Name="MidiWarningLabel" VerticalOptions="End" HorizontalOptions="CenterAndExpand"></Label>
            </StackLayout>
        </Grid>
    </AbsoluteLayout>
</ContentPage.Content>

На скриншоте ниже заметка - x:Name="EvaluationStickyNote", а +/- 60 ударов в минуту [icon] - x:Name="TopButtons"

enter image description here

1 Ответ

3 голосов
/ 07 июля 2019

Прокрутка работает после того, как ScrollView обернут в StackLayout с HorizontalOptions и VerticalOptions, оба установлены на "FillAndExpand" (а также установлены свойства AbsoluteLayout.*), вместо того, чтобы ScrollView как прямое дитя AbsoluteLayout. Невозможность прокрутки не имела ничего общего с наличием других представлений в AbsoluteLayout, перекрывающих ScrollView.

   <ContentPage.Content>
        <AbsoluteLayout LayoutFlags="All" LayoutBounds="0,0,1,1" BackgroundColor="Default">
            <StackLayout AbsoluteLayout.LayoutBounds = "0,0,1,1" AbsoluteLayout.LayoutFlags = "All">
                <ScrollView x:Name="ScoreScrollView" Orientation="Horizontal" ScrollX="{Binding ScoreScrollX}" 
                            HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
                            HorizontalScrollBarVisibility="Always" VerticalScrollBarVisibility="Never" 
                            BackgroundColor="White">
                    <AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" LayoutFlags="HeightProportional" BackgroundColor="LightGray">
                        <AbsoluteLayout x:Name="ScoreContainer" LayoutFlags="All" LayoutBounds="0,0,1,0.75" BackgroundColor="White">
                            . . . .
                        </AbsoluteLayout>
                        <AbsoluteLayout x:Name="VisualizationContainer" LayoutFlags="All" LayoutBounds="0,1,1,0.25"
                                    BackgroundColor="Purple">
                            <skia:SKCanvasView x:Name="TimingViz" PaintSurface="PaintTiming" IgnorePixelScaling="True" Scale="1.0" 
                                       AbsoluteLayout.LayoutFlags="All"
                                       AbsoluteLayout.LayoutBounds="0,0,1,1"
                                       BackgroundColor="White"
                                       />
                        </AbsoluteLayout>
                    </AbsoluteLayout>
                </ScrollView>
            </StackLayout>

            <AbsoluteLayout LayoutFlags="All" LayoutBounds="0,0,1,0.25">
                <AbsoluteLayout x:Name="EvaluationStickyNote"
                                LayoutFlags="None"
                                LayoutBounds="32,16,150,150"
                                IsVisible="False">
                    . . . .
                </AbsoluteLayout>
            </AbsoluteLayout>
            <StackLayout IsVisible="True" Orientation="Vertical" AbsoluteLayout.LayoutFlags="WidthProportional" AbsoluteLayout.LayoutBounds="0,0,1,32" BackgroundColor="Default">
                . . . .
            </StackLayout>
        </AbsoluteLayout>
    </ContentPage.Content>
...