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

.NET8 + MAUI:窗口调整大小时ListView无法滚动且不自适应

.NET 8 MAUI Windows平台ListView调整窗口大小后无法滚动问题排查与解决

问题场景

使用.NET 8 + MAUI开发Windows应用,ListView组件初始加载后可正常滚动,但调整窗口大小后,ListView完全无法进行滚动操作。已在MauiProgram.cs中添加窗口大小变更事件监听,但问题仍未解决。

相关代码(MauiProgram.cs)

builder.ConfigureLifecycleEvents(events =>
{
#if WINDOWS
    events.AddWindows(wndLifeCycleBuilder =>
    {
        wndLifeCycleBuilder.OnWindowSizeChanged((window, args) =>
        {
            Console.WriteLine($"窗口尺寸更新:{args.Size.Width} × {args.Size.Height}");
            // 曾尝试在此添加布局刷新逻辑,但未生效
        });
    });
#endif
});

问题展示

初始正常状态截图

初始状态下ListView可正常滚动

窗口调整后异常状态截图

窗口resize后ListView无法滚动

动态演示

窗口resize后ListView滚动失效的演示

解决思路与方案

  1. 修正布局约束
    确保ListView及其父容器的布局属性设置正确:
  • 父容器(如Grid、StackLayout)设置HorizontalOptions="FillAndExpand"、VerticalOptions="FillAndExpand"
  • ListView自身同样设置HorizontalOptions="FillAndExpand"、VerticalOptions="FillAndExpand",避免设置固定的HeightRequest值
  1. 强制触发ListView布局刷新
    在窗口大小变更事件中,手动触发ListView的布局重新计算:
// 需先获取目标ListView实例,例如通过页面的FindByName方法
var targetListView = App.Current.MainPage.FindByName<ListView>("MyListView");

wndLifeCycleBuilder.OnWindowSizeChanged((window, args) =>
{
    targetListView?.InvalidateMeasure();
    targetListView?.ForceLayout();
});
  1. 替换为CollectionView
    MAUI官方推荐使用CollectionView替代ListView,其在布局适应性和跨平台兼容性上表现更优,尝试替换后验证是否解决问题。

  2. 排查平台特定代码冲突
    若项目中使用了Windows平台的自定义渲染器、平台特定服务或针对ListView的原生代码,检查是否在窗口尺寸变更时干扰了滚动逻辑。

  3. 更新MAUI依赖包
    确保项目中所有.NET 8 MAUI相关NuGet包(如Microsoft.Maui.Controls、Microsoft.Maui.Controls.Compatibility)为最新稳定版本,部分已知的布局Bug已在后续更新中修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:27:22