.NET MAUI 7中ListView动态变更后布局未更新,窗口调整才恢复
.NET MAUI (.NET 7) ListView 动态布局更新异常问题
点击PDF标签切换显示详情Grid时,ListView并未向下推挤其他元素,而是出现滚动条。奇怪的是,调整软件窗口大小后,布局会自动更新,元素被推挤下去,滚动条也随之消失。
对比效果:

XML代码
<ContentPage x:Class="Organaizy.MainPage" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Organaizy" xmlns:viewmodel="clr-namespace:Organaizy.ViewModels"> <Grid BackgroundColor="#282828" RowDefinitions="90*, 10*"> <CollectionView ItemsSource="{Binding Categories}"> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Label Style="{StaticResource CategoryLabelStyle}" Text="{Binding Name}"> <FlyoutBase.ContextFlyout> <MenuFlyout> <MenuFlyoutItem Clicked="RenameCategory_Clicked" Text="Rename" /> <MenuFlyoutItem Clicked="DeleteCategory_Clicked" Text="Delete" /> </MenuFlyout> </FlyoutBase.ContextFlyout> </Label> <ListView ItemsSource="{Binding PDFs}" SelectionMode="None"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <StackLayout> <Label Padding="10" Text="{Binding Name}" TextColor="#FFF"> <Label.GestureRecognizers> <TapGestureRecognizer NumberOfTapsRequired="2" Tapped="OpenPdf_Tapped" /> <TapGestureRecognizer Tapped="ToggleDetails_Tapped" /> </Label.GestureRecognizers> <FlyoutBase.ContextFlyout> <MenuFlyout> <MenuFlyoutItem Clicked="OpenPdf_Clicked" Text="Open" /> <MenuFlyoutItem Clicked="RenamePdf_Clicked" Text="Rename PDF" /> <MenuFlyoutItem Clicked="RenamePdfAuthor_Clicked" Text="Rename Author" /> <MenuFlyoutItem Clicked="ChangePdfCategory_Clicked" Text="Change Category" /> <MenuFlyoutItem Clicked="DeletePdf_Clicked" Text="Delete" /> </MenuFlyout> </FlyoutBase.ContextFlyout> </Label> <Grid ColumnDefinitions="Auto, Auto" IsVisible="False" RowDefinitions="Auto, Auto"> <Label Grid.Row="0" Padding="10,5" Opacity="0.9" Text="{Binding Author, StringFormat='Author: {0}'}" TextColor="#FFF" /> <Label Grid.Row="0" Grid.Column="1" Padding="10,5" Opacity="0.9" Text="{Binding Pages, StringFormat='Pages: {0}'}" TextColor="#FFF" /> </Grid> </StackLayout> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> <Button Grid.Row="1" Margin="10,0" BackgroundColor="#FFF" Clicked="ShowAddOptions_Clicked" CornerRadius="20" FontSize="16" HeightRequest="40" HorizontalOptions="End" Text="+" TextColor="#282828" WidthRequest="40" /> </Grid> <ContentPage.Resources> <ResourceDictionary> <Style x:Key="CategoryLabelStyle" TargetType="Label"> <Setter Property="TextColor" Value="#FFF" /> <Setter Property="FontAttributes" Value="Bold" /> <Setter Property="FontSize" Value="13" /> <Setter Property="Margin" Value="3,0" /> <Setter Property="HorizontalTextAlignment" Value="Center" /> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"> <GradientStop Offset="0" Color="#282828" /> <GradientStop Offset="1" Color="#373737" /> </LinearGradientBrush> </Setter.Value> </Setter> </Style> </ResourceDictionary> </ContentPage.Resources> </ContentPage>
ToggleDetails_Tapped 代码
private void ToggleDetails_Tapped(object sender, TappedEventArgs e) { var label = (Label)sender; var stacklayout = (StackLayout)label.Parent; var grid = (Grid)stacklayout.Children.First(c => c is Grid); grid.IsVisible = !grid.IsVisible; }
已尝试将ListView替换为ScrollView/StackLayout搭配BindingLayout,但未达到预期效果。项目托管在GitHub:DiegoAraujoDEVeloper/Organaizy,可查看详情。
内容的提问来源于stack exchange,提问作者Diego Araujo
相关产品推荐
相关产品推荐

