MAUI(.NET C#)での水平スクロールバーの表示
MAUIでAndroid/iOS向けアプリを開発中です。
画面より広いGridを表示し、水平・垂直スクロールバーが表示される、
つまり指でドラッグすることで上下左右にGridエリアを移動させるUIとしたいです(下記例ではGridは複雑になるためImageで代用しています)。
垂直スクロールバーは表示されますが、水平スクロールバーが表示されません。
該当のソースコード
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MauiApp2.NewPage1" Title="NewPage1"> <Grid RowDefinitions="100,*,100"> <ScrollView Grid.Row="1" VerticalScrollBarVisibility="Always" HorizontalScrollBarVisibility="Always"> <Image Source="dotnet_bot.png" HeightRequest="2000" WidthRequest="2000"/> </ScrollView> </Grid> </ContentPage>
試したこと
- HorizontalScrollBarVisibilityが該当の機能のため、Alwaysを指定していますがバーは表示されません。Default, Neverでも変わりません。
- VerticalScrollBarVisibilityも指定してみましたが、Always、Defaultでスクロールバーが表示されNeverでは表示されないので想定通りです。
- ScrollViewではなくScrollViewerというものも存在しますが、MAUIではサポートしていないようです。
- 上記例のImage部分をGridにしても水平スクロールバーは表示されませんでした。
よろしくお願い致します。
https://learn.microsoft.com/en-us/dotnet/maui/user-interface/controls/scrollview?view=net-maui-7.0#orientation
ありがとうございます。Orientationに水平垂直両方を可とするBothを指定しても同じく垂直スクロールバーしか表示されませんでした。
<ScrollView Grid.Row="1"
VerticalScrollBarVisibility="Always"
HorizontalScrollBarVisibility="Always"
Orientation="Both">
同じページに書いてありますが、他のスクロール可能なコントロールとネストしてはいけないという制限があります。
NestedScrollingEnabled プロパティがあるなら設定を試してみてください。
また、次のような情報もあります。
https://stackoverflow.com/questions/74444141/net-maui-scrollview-doesnt-scroll-in-both-directions
ありがとうございます。
同じような内容でこんな記事もありました。
https://atmarkit.itmedia.co.jp/ait/articles/1612/28/news021.html
ScrollViewの中に入れているImageはNestedScrollingEnabled は存在しませんでした。ScrollView自身にも存在せず、Xamarinとの違いなのかと思っています。
試行錯誤し、Winodws上での起動では下記で水平・垂直スクロールバーが表示されました。
```
<ContentPage 略>
<Grid RowDefinitions="100,*,100">
<ScrollView Grid.Row="1"
VerticalScrollBarVisibility="Always"
HorizontalScrollBarVisibility="Always"
Orientation="Both">
<Grid HeightRequest="3000" WidthRequest="3000"
RowDefinitions="*,*,*" ColumnDefinitions="*,*,*">
<Image
Source="pink.png"
Grid.Row="0" Grid.Column="0"/>
<Image
Source="green.png"
Grid.Row="0" Grid.Column="2"/>
<Image
Source="pink.png"
Grid.Row="1" Grid.Column="1"/>
<Image
Source="green.png"
Grid.Row="2" Grid.Column="0"/>
<Image
Source="green.png"
Grid.Row="2" Grid.Column="2"/>
</Grid>
</ScrollView>
</Grid>
</ContentPage>
```
しかし、同じソースでAndroid上で実行すると、水平スクロールバーのみ表示され、垂直スクロールはできない状態です。
OrientationをBoth以外にも試しましたが、垂直か水平どちらかしかスクロールバーはでませんでした。
現状のMAUIにおけるAndroid仕様なのかもしれません・・
リンクした Stack Overflow の回答では、Android のバグかもしれないので Issue にある解決法を試せと書いてあります。
そして StackLayout で解決しています。
StackLayout で縦横スクロールが可能となりました。
スクロールするエリアで先頭行・先頭列の固定など実現したいことがいろいろあり、StackLayoutで実現できるかわからないですが、スクロールの実績ができましたのでこれをベースに試行錯誤したいと思います。
本件解決しました。ありがとうございます。
自己解決してください。
回答1件
あなたの回答
tips
プレビュー