Maui ScrollView - 内容动态更改时滚动条长度不更新
Maui ScrollView - Scrollbar length not updating when content dynamically changed
我尝试 this content 使用 TwoWay 模式。
我用的是ObservableCollection,当我修改内容时更新了,但是滚动长度没有更新。
右滚动条太长。
如何更新滚动条长度?
<ScrollView BackgroundColor="LightGray" x:Name="InfoStack">
<StackLayout
BindableLayout.ItemsSource="{Binding Source={x:Static local:InfoHelpers.Ints}, Mode=TwoWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<.../>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
更改内容后,可能修复它:
(InfoStack as IView).InvalidateArrange();
HACK:如果这没有任何作用,请稍微延迟一下:
Dispatcher.Dispatch(async() =>
{
await Task.Delay(100);
(InfoStack as IView).InvalidateArrange();
}
(虽然涉及时间延迟的黑客攻击并不可靠,但如果第一个不起作用,但这个确实有效,那可能有助于确定“真正的”问题。)
它在不同平台上的行为不同。
我确实在 Windows desktop
、iOS
和 Android
模拟器上测试了您的代码。
结果是它仅适用于 Windows 桌面 ,ScrollView 不会按预期在 iOS 和 Android 上动态扩展。
好像是 potential issue
,考虑在 github 上解决这个问题:https://github.com/dotnet/maui/issues .
解决方法
使用 CollectionView
代替 ScrollView
。
<CollectionView ItemsSource="{Binding Source={x:Static local:InfoHelpers.Ints}, Mode=TwoWay}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding .}" HeightRequest="40"/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
我尝试 this content 使用 TwoWay 模式。
我用的是ObservableCollection,当我修改内容时更新了,但是滚动长度没有更新。
右滚动条太长。
如何更新滚动条长度?
<ScrollView BackgroundColor="LightGray" x:Name="InfoStack">
<StackLayout
BindableLayout.ItemsSource="{Binding Source={x:Static local:InfoHelpers.Ints}, Mode=TwoWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<.../>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
更改内容后,可能修复它:
(InfoStack as IView).InvalidateArrange();
HACK:如果这没有任何作用,请稍微延迟一下:
Dispatcher.Dispatch(async() =>
{
await Task.Delay(100);
(InfoStack as IView).InvalidateArrange();
}
(虽然涉及时间延迟的黑客攻击并不可靠,但如果第一个不起作用,但这个确实有效,那可能有助于确定“真正的”问题。)
它在不同平台上的行为不同。
我确实在 Windows desktop
、iOS
和 Android
模拟器上测试了您的代码。
结果是它仅适用于 Windows 桌面 ,ScrollView 不会按预期在 iOS 和 Android 上动态扩展。
好像是 potential issue
,考虑在 github 上解决这个问题:https://github.com/dotnet/maui/issues .
解决方法
使用 CollectionView
代替 ScrollView
。
<CollectionView ItemsSource="{Binding Source={x:Static local:InfoHelpers.Ints}, Mode=TwoWay}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding .}" HeightRequest="40"/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>