SuperAPI AI 工具集

avalonia-xaml

编程与开发

查看项目

更新于 11-03 16:15

技能介绍

Avalonia XAML 技能面向编写或审查 Avalonia XAML 标记的场景,资料覆盖 .axaml 文件、XML 命名空间、代码隐藏、标记扩展,以及不使用 XAML 而用代码构建 UI 的写法。

一、基本约定 Avalonia 使用 .axaml 扩展名(而非 .xaml),以避免与 Visual Studio 的 WPF 工具发生冲突。XAML 是可选的,Avalonia 支持完全用代码构建 UI。关于编译绑定:资料称 12.0+ 默认开启编译绑定(AvaloniaUseCompiledBindingsByDefault=true),此时 {Binding} 映射为 CompiledBinding,凡是使用绑定的地方都需要 x:DataType;11.x 中编译绑定为可选启用({CompiledBinding} 或 x:CompileBindings="True")。可用的回退方式是 {ReflectionBinding Path} 或 x:CompileBindings="False"。

二、文件结构 每个 .axaml 文件都需要 Avalonia 根命名空间和语言命名空间。典型根元素同时声明 xmlns、xmlns:x、自定义命名空间(如 xmlns:vm="using:MyApp.ViewModels")、x:Class、x:DataType 以及窗口属性,子元素使用 {Binding} 绑定。对应的代码隐藏文件为 partial 类,构造函数中调用 InitializeComponent()。

三、XML 命名空间 命名空间语法包括:using: 用于同一解决方案内的程序集(推荐);clr-namespace: 用于外部程序集,需配合 ;assembly=;URI 用于框架命名空间。常用前缀包括:默认命名空间 https://github.com/avaloniaui(全部 Avalonia 控件)、x:(XAML 语言特性)、vm:(视图模型类型)、conv:(转换器类)、sys:(System 类型,如 Math、String)。

四、标记扩展 资料列出的标记扩展包括:{Binding}(12.0+ 为编译绑定,需 x:DataType;11.x 为反射绑定)、{CompiledBinding}(所有版本可用的显式编译期检查绑定)、{ReflectionBinding}(运行时反射绑定,12.0+ 用于无 x:DataType 时退出编译绑定;11.x 中使用 {Binding})、{StaticResource}(一次性资源查找)、{DynamicResource}(资源变化时实时更新)、{x:Static}(静态字段/属性)、{x:Type}(类型引用)、{x:Null}(空字面量)、{OnPlatform}(按平台取值)、{OnFormFactor}(按设备形态取值)。

五、x: 属性 常用属性包括:x:Class(将 AXAML 与代码隐藏 partial 类关联,必须与命名空间和类名完全一致)、x:Name(为控件命名以便代码隐藏访问,会生成类型化字段)、x:Key(资源字典键)、x:DataType(编译绑定根类型,在根元素或 DataTemplate 上使用编译绑定时必需)、x:CompileBindings(按作用域启用/禁用编译绑定)。资料还提到 12.0+ 的 ExperimentalAttribute:XAML 遵循类型/成员上的 [Experimental],使用它们需要抑制诊断(<NoWarn>)。

六、代码隐藏模式 代码隐藏文件为 partial 类,调用 InitializeComponent();通过 x:Name 生成的字段可在事件处理中访问控件。示例展示按钮 Click 事件中通过生成字段修改控件状态。

七、纯代码 UI 资料指出纯代码 UI 适用于动态创建控件、无头测试、生成式 UI。示例用 Window、StackPanel、TextBlock、Button 等对象初始化器构建界面,并展示代码中的绑定写法:12.0+ 可使用 ReflectionBinding 或 CompiledBinding.Create(AOT/裁剪安全),11.x 使用 new Binding("Name")。

八、手势事件(12.0+) 手势附加事件直接位于 InputElement 上,去掉 Gestures. 前缀(Gestures 不再公开),例如使用 Pinch、ScrollGesture、Tapped;11.x 中为 Gestures.Pinch、Gestures.ScrollGesture。

九、资源字典 可在 Application.Resources 中定义 ResourceDictionary、MergedDictionaries 与 ResourceInclude,并定义带 x:Key 的画刷或颜色资源;资源文件本身也是 ResourceDictionary。

十、常见错误与修复 资料列举:使用 .xaml 扩展名应改为 .axaml;缺少 xmlns="https://github.com/avaloniaui" 应补为根元素第一个属性;外部库 clr-namespace: 缺少 ;assembly=;迁移到 12 后编译绑定报“Cannot resolve symbol”或 {Binding} 编译失败,应在根或 DataTemplate 添加 x:DataType 或改用 {ReflectionBinding};12.x 中仍写 Gestures.Pinch 应改为 Pinch;代码隐藏无法访问 x:Name 字段应确认文件为 .axaml 且调用了 InitializeComponent();{StaticResource} 运行时找不到应确保资源在文档顺序中先定义;性能敏感路径使用 {DynamicResource} 时,若资源从不变化应改用 {StaticResource}。

限制与未提供信息:资料未涉及该技能的安装方式、价格、平台支持范围或效果指标,这些内容暂未提供。