You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:02:08