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

MAUI中Windows平台ScrollView下方按钮不显示问题排查

MAUI提交按钮在Windows平台不显示,Android正常

我的MAUI布局在Android平台上,提交按钮能正常显示在左下角,但在Windows平台启动应用时,不管窗口多大,按钮都看不到。按钮位于Grid的第一列最后一行,第一列是*尺寸,按Android的逻辑,第一列的Label会设置列宽;最后一行为auto尺寸,应该能包裹按钮,请问我哪里错了?

相关代码

<?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"
             xmlns:models="clr-namespace:TOTools.Models"
             xmlns:scheduler="clr-namespace:TOTools.Scheduler"
             x:DataType="scheduler:SchedulerEventPage"
             x:Class="TOTools.Scheduler.SchedulerEventPage"
             Title="Event Scheduler">
    <ContentPage.Content>

        <Grid
            ColumnDefinitions="*, auto, auto"
            RowDefinitions="auto, *, auto, auto"
            Margin="16, 16, 16, 16">

            <Label Text="Event Link"
                   FontSize="31"
                   Grid.Column="0"
                   Grid.Row="0" />

            <Label Text="Start Time"
                   FontSize="31"
                   Grid.Column="1"
                   Grid.Row="0" />

            <ImageButton Source="settings.svg"
                         Clicked="OnSettingsImageButtonClicked"
                         Grid.Column="2" />

            <ScrollView
                Grid.Row="1"
                Grid.ColumnSpan="3">
                <CollectionView
                    x:Name="MatchList"
                    ItemsSource="{Binding Events}">

                    <CollectionView.ItemTemplate>
                        <DataTemplate x:DataType="models:EventLink">
                            <Grid
                                RowDefinitions="*"
                                ColumnDefinitions="*, auto, auto">
                                <Label Text="{Binding Link }"
                                       FontSize="31"
                                       Grid.Column="0">
                                </Label>
                                <Label Text="{Binding StartTime }"
                                       FontSize="31"
                                       Grid.Column="1">
                                </Label>
                            </Grid>
                        </DataTemplate>
                    </CollectionView.ItemTemplate>
                </CollectionView>
            </ScrollView>

            <ImageButton Source="plus.svg"
                         HorizontalOptions="Start"
                         Grid.Row="2" />

            <Button Text="Submit"
                    Grid.Row="3"
                    FontAttributes="Bold"
                    VerticalOptions="Center"
                    HorizontalOptions="Start"
                    Clicked="SubmitButtonClicked" />

        </Grid>

    </ContentPage.Content>
</ContentPage>

问题分析与解决

  • 核心问题:Windows平台的Grid布局渲染逻辑和Android存在差异:

    1. 未明确指定按钮的Grid.Column,虽然默认是0,但Windows下可能因列宽计算逻辑导致按钮被隐藏;
    2. ScrollView未设置VerticalOptions="FillAndExpand",在Windows下可能会占据所有剩余空间,把底部的按钮挤出可视区域;
    3. 底部的ImageButton和Submit按钮未设置Grid.ColumnSpan="3",被限制在第一列内,而第一列是*宽度,若内容不足可能导致布局偏移。
  • 修复方案:

    1. 给Submit按钮明确添加Grid.Column="0",消除布局歧义;
    2. 为底部的ImageButton和Submit按钮设置Grid.ColumnSpan="3",让它们在整个Grid宽度范围内布局;
    3. 给ScrollView添加VerticalOptions="FillAndExpand",确保它仅占用可用空间,不挤压底部行;
    4. 可选:给Grid的最后两行添加MinHeightRequest,保证按钮有足够的显示高度。

修改后的代码

<?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"
             xmlns:models="clr-namespace:TOTools.Models"
             xmlns:scheduler="clr-namespace:TOTools.Scheduler"
             x:DataType="scheduler:SchedulerEventPage"
             x:Class="TOTools.Scheduler.SchedulerEventPage"
             Title="Event Scheduler">
    <ContentPage.Content>

        <Grid
            ColumnDefinitions="*, auto, auto"
            RowDefinitions="auto, *, auto, auto"
            Margin="16, 16, 16, 16">

            <Label Text="Event Link"
                   FontSize="31"
                   Grid.Column="0"
                   Grid.Row="0" />

            <Label Text="Start Time"
                   FontSize="31"
                   Grid.Column="1"
                   Grid.Row="0" />

            <ImageButton Source="settings.svg"
                         Clicked="OnSettingsImageButtonClicked"
                         Grid.Column="2" />

            <ScrollView
                Grid.Row="1"
                Grid.ColumnSpan="3"
                VerticalOptions="FillAndExpand">
                <CollectionView
                    x:Name="MatchList"
                    ItemsSource="{Binding Events}">

                    <CollectionView.ItemTemplate>
                        <DataTemplate x:DataType="models:EventLink">
                            <Grid
                                RowDefinitions="*"
                                ColumnDefinitions="*, auto, auto">
                                <Label Text="{Binding Link }"
                                       FontSize="31"
                                       Grid.Column="0">
                                </Label>
                                <Label Text="{Binding StartTime }"
                                       FontSize="31"
                                       Grid.Column="1">
                                </Label>
                            </Grid>
                        </DataTemplate>
                    </CollectionView.ItemTemplate>
                </CollectionView>
            </ScrollView>

            <ImageButton Source="plus.svg"
                         HorizontalOptions="Start"
                         Grid.Row="2"
                         Grid.ColumnSpan="3" />

            <Button Text="Submit"
                    Grid.Row="3"
                    Grid.Column="0"
                    Grid.ColumnSpan="3"
                    FontAttributes="Bold"
                    VerticalOptions="Center"
                    HorizontalOptions="Start"
                    Clicked="SubmitButtonClicked" />

        </Grid>

    </ContentPage.Content>
</ContentPage>

内容的提问来源于stack exchange,提问作者John Glen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:42:08