AvaloniaUI 11.3.0 跨平台 UI 升级:SplitView 与 NativeMenuBar 用法及兼容性说明
【免费下载链接】AvaloniaDevelop Desktop, Embedded, Mobile and WebAssembly apps with C# and XAML. The future of .NET UI项目地址: https://gitcode.com/GitHub_Trending/ava/Avalonia
AvaloniaUI 11.3.0 是面向 Windows、macOS、Linux 的跨平台 UI 版本。它主要解决三件事:macOS 原生渲染后端重写、SplitView 自适应侧边栏、以及一套更顺手的原生组件调试方式。适合正在维护 Avalonia 应用、准备升级到 11.3.0 的 .NET 开发者阅读。
快速了解
- macOS 渲染后端改用 Objective-C 桥接并接入 Metal 加速;官方基准测试显示,macOS 上图形渲染性能提升 60%,内存占用减少 25%,Linux 启动速度提升 40%。
SplitView提供 Inline、CompactInline、Overlay、CompactOverlay 四种折叠模式,用于构建自适应侧边栏。NativeMenuBar让同一份菜单代码在三个平台都遵循各自的菜单规范。AvaloniaNativeLibraryPath可指向本地编译的原生库,免去每次全量重建。- 升级涉及命名空间、
Popup属性重命名、Fluent 主题资源键前缀三类改动。
场景化讲解
场景一:如何编写跨平台菜单栏 NativeMenuBar
解决什么问题:菜单在不同平台各有一套规范。NativeMenuBar让同一份声明在 Windows 上表现为系统菜单,在 macOS 上融入标题栏,在 Linux 上支持全局菜单模式,不必为每个平台写分支。
怎么配置:在窗口根元素下放一个NativeMenuBar,用NativeMenuItem描述层级,Click绑定回调。
<NativeMenuBar> <NativeMenuItem Header="File"> <NativeMenuItem Header="New" Click="OnNewClicked"/> </NativeMenuItem> </NativeMenuBar>代码在哪:控件位于 src/Avalonia.Controls/NativeMenuBar.cs,内部依赖PART_NativeMenuPresenter模板部件承载实际菜单。
场景二:如何用 SplitView 实现自适应侧边栏
解决什么问题:侧边栏要随窗口宽度切换内嵌或覆盖两种形态。SplitView由一个可折叠侧栏加一个内容区组成,DisplayMode支持四种模式。官方基准测试显示,在 1000+ 列表项的场景下它仍保持 60fps。
怎么配置:用PaneWidth设定侧栏宽度,再监听SizeChanged,宽度低于 768 像素时切到Overlay并收起侧栏,否则切回Inline。
private void OnWindowSizeChanged(object s, SizeChangedEventArgs e) { if (e.NewSize.Width < 768) { MainSplitView.DisplayMode = SplitViewDisplayMode.Overlay; MainSplitView.IsPaneOpen = false; } else { MainSplitView.DisplayMode = SplitViewDisplayMode.Inline; MainSplitView.IsPaneOpen = true; } }代码在哪:核心实现在 src/Avalonia.Controls/SplitView/SplitView.cs,显示模式枚举见 src/Avalonia.Controls/SplitView/SplitViewDisplayMode.cs。
场景三:如何用 AvaloniaNativeLibraryPath 调试 macOS 原生组件
解决什么问题:macOS 后端含一段 Objective-C 原生代码。每次手改后若全量重建,等待时间长。AvaloniaNativeLibraryPath可让应用直接加载你本地编译出的 dylib,跳过整条重建链路。
怎么配置:在AppBuilder里挂一个AvaloniaNativePlatformOptions,把AvaloniaNativeLibraryPath指向 Xcode 的编译产物。
public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure<App>() .UsePlatformDetect() .With(new AvaloniaNativePlatformOptions { AvaloniaNativeLibraryPath = "/path/to/Avalonia.Native.dylib" });Xcode 的 Products 面板显示编译产物路径,把它填进AvaloniaNativeLibraryPath即可。
代码在哪:macOS 原生后端源码在 native/Avalonia.Native/src/OSX/,调试方法说明在 docs/macos-native.md。
升级与兼容
11.3.0 升级检查清单
- 命名空间调整:原生控件整体移至
Avalonia.Controls.Native。 - API 重命名:
Popup的PlacementMode改名为Placement。 - 样式前缀:Fluent 主题资源键前缀由
ava改为avalonia。
Avalonia 在同一主版本内保持源与二进制兼容,破坏性变更需代码团队批准。从 11.2 升到 11.3 时,通常只需按上面三条逐条改。
旧项目如何兼容处理
需要同时支持旧版系统的项目,可用条件编译把新旧 API 隔开:
#if AVALONIA_11_3_OR_GREATER splitView.DisplayMode = SplitViewDisplayMode.CompactOverlay; #else splitView.DisplayMode = SplitViewDisplayMode.CompactOverlay; #endif兼容策略说明见 docs/api-compat.md。
结尾与资源
11.3.0 把 macOS 的体验拉到了更接近原生的位置,也为后续版本预留了扩展空间。下面是定位这些改动的几个入口:
- 开发者文档:docs/index.md
- 示例代码:samples/ControlCatalog/
- 构建指南:docs/build.md
- 贡献指南:CONTRIBUTING.md
【免费下载链接】AvaloniaDevelop Desktop, Embedded, Mobile and WebAssembly apps with C# and XAML. The future of .NET UI项目地址: https://gitcode.com/GitHub_Trending/ava/Avalonia
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考