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

为 Avalonia 启用平滑滚动与缩放

为 Avalonia 启用平滑滚动与缩放

在 Avalonia 中,ScrollViewer 在鼠标滚轮下是没有平滑滚动的,看起来非常生硬。同时, ScrollViewer 也不支持平移、缩放等操作,这使得社区不得不使用为 PanAndZoom 等第三方控件

为此,我编写了 SmoothScroll.Avalonia 库,可以为应用中的所有 ScrollViewer 一键启用平滑滚动支持。同时,库中提供的 ScrollView 控件(继承自 ScrollViewer)还增加了平移和缩放功能

注意: 这是一个实验性项目

当前实现需要使用 Avalonia 渲染层的一些内部 API

效果如下:

20260409-1018-26

使用方式

启用 ScrollViewer 的平滑滚动

安装 NuGet 包后,只需将 ScrollViewerSmoothTheme 添加到 Application.Styles 中即可

<Applicationxmlns:smoothScroll="using:SmoothScroll.Avalonia.Controls"><Application.Styles><... /><smoothScroll:ScrollViewerSmoothTheme /></Application.Styles>
</Application>

如果需要自定义样式,在你自己编写的 ScrollViewer 样式中将 ScrollContentPresenter 替换为包内提供的 ScrollPresenter 也可实现相同效果

使用 ScrollView 进行平移与缩放

ScrollView 是一个独立的控件。使用前,需要添加默认样式:

<Applicationxmlns:smoothScroll="using:SmoothScroll.Avalonia.Controls"><Application.Styles><... /><smoothScroll:ScrollViewDefaultTheme /></Application.Styles>
</Application>

它继承自 ScrollViewer,因此你可以将应用中的 ScrollViewer 直接替换为 ScrollView 来单独启用某处的平滑滚动。但与 ScrollViewer 不同的是,此控件还额外提供了缩放相关的属性和方法:

属性/方法 描述
bool IsZoomEnabled 是否启用缩放
double ZoomFactor 当前缩放倍率 (只读)
double MinZoomFactor 最小缩放倍率
double MaxZoomFactor 最小缩放倍率
void ZoomTo(double) 缩放到指定倍率
void ZoomBy(double) 按指定增量进行缩放

例如,你可以将 Image 放入 ScrollView 中来创建一个图片查看器

<smoothScroll:ScrollViewHorizontalContentAlignment="Center"VerticalContentAlignment="Center"IsZoomEnabled="True"HorizontalScrollBarVisibility="Hidden"VerticalScrollBarVisibility="Hidden"><Image Source="avares://SmoothScroll.Avalonia.Sample/Assets/Images/4074.bmp" Stretch="UniformToFill" />
</smoothScroll:ScrollView>

image

实现细节将会在下篇文章中进一步介绍!

http://www.jsqmd.com/news/614078/

相关文章:

  • 从主从复制到MGR:为什么你的MySQL高可用方案该升级了?
  • 【大疆dji】ESDK开发环境搭建(网络配置篇)
  • 如何在5分钟内掌握Fan Control风扇控制软件?Windows系统散热优化完全指南
  • 真实用户测评,清渍护齿效果突出,2026牙白去黄牙膏热销榜第一名推荐 - 资讯焦点
  • Windows下Electron打包踩坑:ERR_ELECTRON_BUILDER_CANNOT_EXECUTE,别急着改权限,先看看你的安装包是不是太大了
  • 魔兽争霸III优化神器:WarcraftHelper让你的经典游戏焕然一新
  • 从“缝合怪”到“架构师”:用模块化思维重构你的YOLO项目(附完整代码模板)
  • Agent 时代的 PM 新能力:从写需求到写“策略与约束”
  • 破解 Agent 技能孤岛 好本事全公司共享
  • MacOS下VMware Fusion配置静态IP与端口转发实战指南
  • FastAPI 教务教研管理系统架构设计
  • 向量数据库 vs. ArangoDB 知识图谱 GraphRAG
  • 农业PHP配置黑盒被攻破:基于AST解析的可视化参数血缘追踪技术(附开源工具链v1.3.0)
  • 【蒸馏技术KD】
  • WPF新手村教程(七)—— 终章(MVVM架构初见杀)湃
  • 2026届毕业生推荐的六大降重复率助手推荐榜单
  • EVM锁链 vs 公链革命:GameFi开发者如何破解「不可能三角」?
  • Linux字符设备驱动开发:alloc_chrdev_region自动分配设备号的5个实用技巧
  • 告别手动修复!用Word宏自动化解决多级列表编号不显示的顽疾
  • 复杂反应场景适配,反应釜加工定制哪家好?行业知名品牌,技术强、售后完善 - 品牌推荐大师
  • 新闻发稿快速上首页!2026 年高权重平台推荐 - 博客湾
  • 探秘新时达软件上位机:007软件的神奇功能
  • 高效Windows 11系统优化工具Win11Debloat完全指南
  • CentOS 7 无线网卡驱动安装全攻略:从内核升级到驱动加载
  • MFC进度条控件实战:从创建到动态更新的完整指南(附定时器技巧)
  • 数据泵
  • 在RK3588开发板上搞定FPGA的PCIe通信:XDMA驱动编译与加载避坑实录
  • 市面上知名男士及膝泳裤口碑大揭秘,究竟谁能脱颖而出?
  • 威海本地采购更省心,威海反应釜厂家推荐,化工/实验室/高压型号全覆盖可定制 - 品牌推荐大师
  • 抽象思维训练:从具体问题到通用解决方案