当前位置: 首页 > news >正文

AvaloniaProperty

Avalonia 并不是单纯地复刻了 WPF 的属性系统,而是对其进行了“扩容”。

在 WPF 中,几乎所有高级功能(绑定、动画、样式)都依赖 DependencyProperty

而在 Avalonia 中,为了性能和灵活性,它把属性拆分成了两类:StyledProperty(更像 WPF)和 DirectProperty(更轻量)。


1. 核心成员关系图

为了方便理解,你可以把它们的关系看作:

  • AvaloniaProperty: “属性”的总称(抽象基类)。
  • StyledProperty: 功能全、支持样式(Style)和资源(Resource),但开销略大。
  • DirectProperty: 速度快、开销小,主要用于简单的属性,不支持样式覆盖。

2. StyledProperty:WPF 开发者最熟悉的“老朋友”

这是 WPF DependencyProperty 的直接替代品。它支持 Avalonia 最强大的特性:样式系统

  • 特点:支持从 CSS 类似的样式表中继承值,支持优先级排序(如:本地值 > 样式值 > 默认值)。
  • 适用场景:绝大多数 UI 控件的自定义属性(如 Background, FontSize)。
public class MyControl : Control
{// 1. 定义:使用 AvaloniaProperty.Register 注册// 类似于 WPF 的 DependencyProperty.Registerpublic static readonly StyledProperty<string> MyTextProperty =AvaloniaProperty.Register<MyControl, string>(name: "MyText",            // 属性名defaultValue: "Hello");    // 默认值// 2. 包装:CLR 属性包装器public string MyText{get => GetValue(MyTextProperty);set SetValue(MyTextProperty, value);}
}

3. DirectProperty:为性能而生的“新武器”

这是 Avalonia 的特色。它不通过 Avalonia 的内部字典存储值,而是直接使用你类中的私有字段

  • 特点

  • :读写速度接近普通 C# 属性。

  • :内存占用极低。

  • 局限不支持样式(Styles)覆盖。你不能在 .axaml<Style> 里改变它的值。

  • 适用场景:只需要数据绑定、只需要只读属性、或者对性能要求极高的列表项属性。

public class MyControl : Control
{// 1. 定义私有字段存储数据private string _fileName = "untitled.txt";// 2. 定义:使用 AvaloniaProperty.RegisterDirect 注册public static readonly DirectProperty<MyControl, string> FileNameProperty =AvaloniaProperty.RegisterDirect<MyControl, string>(nameof(FileName),      // 属性名o => o.FileName,       // Getter:告诉框架怎么读字段(o, v) => o.FileName = v // Setter:告诉框架怎么写字段);// 3. 包装:直接操作私有字段public string FileName{get => _fileName;// 注意:设置值时需要调用 SetAndRaise 触发通知,以便绑定能更新set => SetAndRaise(FileNameProperty, ref _fileName, value);}
}

4. 总结对比

特性 StyledProperty (类似 WPF) DirectProperty (Avalonia 特色)
存储方式 框架内部维护(字典存储) 类成员字段(手动定义字段)
查询速度 较慢(涉及优先级计算) 极快(直接访问字段)
样式支持 支持(可在 Style 中写 Setter) 不支持
默认值 在注册时统一定义 在字段初始化时定义
内存开销 稍高 极低

为什么要这么设计?

在 WPF 中,由于所有依赖属性都非常“重”,当界面上有成千上万个带属性的对象时,内存和 CPU 压力会很大。

Avalonia 的逻辑是:

  1. 如果你需要这个属性被 Style(样式表) 改变(比如按钮的颜色),用 StyledProperty
  2. 如果这个属性只是用来 DataBinding(数据绑定) 或显示(比如列表里的文件名),用 DirectProperty 能显著提升渲染性能。
http://www.jsqmd.com/news/414866/

相关文章:

  • 2026年度五大人力外包品牌推荐,专业服务商助力企业降本增效 - 包罗万闻
  • 2026年农用/温室/养殖/海参/羊肚菌遮阳网厂家推荐:山东环农生态科技 - 品牌推荐官
  • 2026私有化部署优质服务商榜单:AI知识库部署方案商、Deepseek服务商、企业智能BI私有化部署厂商、本地BI部署厂商精选 - 品牌2025
  • 记录几个常用网站
  • 深入解析计算机网络的结构与性能
  • 苏州家教收费指南:如何评估一对一老师价格,家教/上门家教/一对一/上门一对一/封闭式全托集训营/师范家教,家教老师推荐 - 品牌推荐师
  • 2026年企业智能服务核心厂商推荐: 知识库部署厂商、企业知识库部署厂商、AI 知识库部署方案商、Deepseek 知识库部署服务商全覆盖 - 品牌2025
  • 2026精品咖啡豆品牌排行榜前五:风味与口碑之选 - 品牌排行榜
  • 2026年浙江温州冷镦加工标杆厂家最新推荐:冷镦套管加工、紧固件冷镦加工、非标冷镦螺母加工、非标铜冷镦加工、非标铝冷镦加工、浩运五金非标冷镦技术新标杆 - 海棠依旧大
  • 阿虎医考主管药师网课怎么样?我花了3个月亲测,这两个班型是真香 - 医考机构品牌测评专家
  • JAVA WEB学习13
  • 2026年乐山美食街厂家最新推荐:乐山必吃美食/乐山特色美食/乐山美食必吃榜/乐山美食打卡/乐山美食排行榜/选择指南 - 优质品牌商家
  • 2026国内比较好的徐州毛坯装修企业推荐 - 品牌排行榜
  • 克鲁斯机器人碳钢焊接节能阀
  • “AI+电商直播”智慧实训,如何为教师按下效率提升的“快进键”?
  • 2026年值得尝试的精品咖啡豆品牌推荐 - 品牌排行榜
  • 模型输出乱码、无限重复单一字符与FP16精度溢出
  • 2026视黄醇亚油酸酯供应商有哪些?行业品质之选 - 品牌排行榜
  • 2026年2月上海靠谱的咖啡服务商:开店避坑必看 - 疯一样的风
  • 2026年临时道路钢板租赁,这些实力公司别错过,短期钢板租赁/工程钢板出租/工地施工钢板租赁,临时道路钢板租赁厂家选哪家 - 品牌推荐师
  • rocketmq
  • 2026年高频炉电磁加热器厂家推荐:高频加热器炉/全自动数控淬火设备/感应加热设备厂家精选 - 品牌推荐官
  • 2026年评价高的乐山美食公司推荐:乐山美食有哪些/乐山跷脚牛哪家正宗/乐山跷脚牛肉哪家好吃/乐山跷脚牛肉推荐/选择指南 - 优质品牌商家
  • 2026年商用洗衣机厂家推荐:工业洗衣机洗脱一体机/洗涤机械/洗涤设备价格查询/洗涤设备公司/选择指南 - 优质品牌商家
  • 2026市面上诚信的徐州二手房装修公司推荐:爱尚铭家装饰 - 品牌排行榜
  • 2026年设备减震器专业选型指南:空调减震器/弹簧减震器/HV型吊式弹簧减震器/空气减震器厂家推荐 - 品牌推荐官
  • 工业AI智能体:从辅助工具到生产系统的中枢神经
  • 2026高纯度视黄醇亚油酸酯生产商推荐及行业趋势分析 - 品牌排行榜
  • 数据防泄露实时监测:现代企业的安全必修课
  • 2026 塑胶管道行业甄选:PE/HDPE/ 复合 / PVC / 波纹管五大优质品牌推荐 - 深度智识库