Avalonia如何实现平滑滚动与缩放的设置?

摘要:为 Avalonia 启用平滑滚动与缩放 在 Avalonia 中,ScrollViewer 在鼠标滚轮下是没有平滑滚动的,看起来非常生硬。同时, ScrollViewer 也不支持平移、缩放等操作,这使得社区不得不使用为 PanAndZo
为 Avalonia 启用平滑滚动与缩放 在 Avalonia 中,ScrollViewer 在鼠标滚轮下是没有平滑滚动的,看起来非常生硬。同时, ScrollViewer 也不支持平移、缩放等操作,这使得社区不得不使用为 PanAndZoom 等第三方控件 为此,我编写了 SmoothScroll.Avalonia 库,可以为应用中的所有 ScrollViewer 一键启用平滑滚动支持。同时,库中提供的 ScrollView 控件(继承自 ScrollViewer)还增加了平移和缩放功能 注意: 这是一个实验性项目 当前实现需要使用 Avalonia 渲染层的一些内部 API 效果如下: 使用方式 启用 ScrollViewer 的平滑滚动 安装 NuGet 包后,只需将 ScrollViewerSmoothTheme 添加到 Application.Styles 中即可 <Application xmlns:smoothScroll="using:SmoothScroll.Avalonia.Controls"> <Application.Styles> <... /> <smoothScroll:ScrollViewerSmoothTheme /> </Application.Styles> </Application> 如果需要自定义样式,在你自己编写的 ScrollViewer 样式中将 ScrollContentPresenter 替换为包内提供的 ScrollPresenter 也可实现相同效果 使用 ScrollView 进行平移与缩放 ScrollView 是一个独立的控件。使用前,需要添加默认样式: <Application xmlns: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:ScrollView HorizontalContentAlignment="Center" VerticalContentAlignment="Center" IsZoomEnabled="True" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"> <Image Source="avares://SmoothScroll.Avalonia.Sample/Assets/Images/4074.bmp" Stretch="UniformToFill" /> </smoothScroll:ScrollView> 实现细节将会在下篇文章中进一步介绍!